多个参数合并为一个Spring控制器参数

时间:2012-07-01 08:44:45

标签: java spring spring-mvc controller

我有类似以下的课程设置......

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) {
    ....
}

我正在传递一个直接的网址,例如......

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

是否可以将所有这些传递到我的控制器中的“Person”参数中,而不是为每个参数创建大量@RequestParam个参数?特别是如果我要传递大量的参数?

3 个答案:

答案 0 :(得分:1)

是的,只要您遵循Person的属性命名约定,就可以按照您描述的确切方式执行此操作。

当你以这种方式尝试时会遇到什么问题?

答案 1 :(得分: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

答案 2 :(得分:0)

这个问题在这里也很好地回答: Passing parameters from JSP to Controller in Spring MVC

仔细阅读答案,希望你能正确得到答案。