2012-07-01 57 views
0

我有一類設置類似下面的...多個參數爲一個春天控制器參數

public class Person { 
    protected String firstName; 
    protected String lastName; 
    protected Integer age; 
    ... 
} 

控制器,該控制器看起來像這樣...

@RequestMapping(value={"/person"}, method = RequestMethod.GET) 
public void returnPerson(Person person, ModelMap model, HttpServletResponse response) { 
    .... 
} 

而且我傳遞一個直接的URL如...

<a href="/person?firstName=John&lastName=Smith&age=18">Link</a> 

是否有可能通過所有這些到我的控制器中的「Person」參數而不是m爲每個人提供多個參數@RequestParam?特別是如果我要通過大量的參數?

回答

1

是的,只要您遵循Person的屬性命名約定,您就可以按照您所描述的確切方式執行此操作。

當你以這種方式嘗試時,你會得到什麼問題?

+0

我可以按原樣離開控制器方法還是需要使用'@RequestParam Person person'?當我傳入URL時,使用'@ResponseBody Person person'時會出現415媒體不支持的錯誤 – user1015523

1

你可以做的正是你問使用模型綁定:

@ModelAttribute("person") 
public Person getPerson() { 
    return new Person(); 
} 

@RequestMapping(value="/person", method=RequestMethod.GET) 
public void handle(@ModelAttribute("person") Person person, BindingResult errors, ModelMap model, HttpServletRequest req) { 
    ... 
} 

模型屬性將由getPerson方法時handle方法火災,從請求任何參數會自動初始化,並綁定到新Person對象中的相應屬性。 BindingResult由於綁定而存在任何錯誤,例如,如果您通過「XYZ」作爲年齡字段(整數)。

更多的信息在這裏http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html

相關問題