Spring @MVC如何从请求参数获取JavaBeans列表而不将列表包装在对象中

时间:2013-04-24 09:20:14

标签: spring spring-mvc data-binding

我需要这个控制器:

@RequestMapping("/path/to/my/app")
public String process(List<JavaBean> javaBeans){
    // Do something with the list
}

在客户端,我需要手动创建用户操作列表,如此

<form action="/path/to/my/app">
    <input name="javaBeans[0].field1"/>
    <input name="javaBeans[0].field2"/>
    <input name="javaBeans[0].field3"/>
    <br/>
    <input name="javaBeans[1].field1"/>
    <input name="javaBeans[2].field2"/>
    <input name="javaBeans[3].field3"/>
    <!-- and so forth -->
</form>

我的主要问题是我在控制器中收到空列表。我必须将其包装在另一个javabean中以使代码工作。喜欢以下

public class BeanWrapper{
    private List<JavaBean> javaBeans;

    // Getter and setter
}

并在控制器中

@RequestMapping("/path/to/my/app")
public String process(BeanWrapper wrapper){
    List<JavaBean> list = wrapper.getJavaBeans();
    // Do something with the list
}

此版本有效,但我必须不必要地将我的列表包裹在一个对象周围。有办法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

public String process(@RequestParam("javaBeans[]") List<JavaBean> javaBeans) {

<强>更新

Spring默认绑定目前不支持使用索引(javaBeans[1])的语法。如评论中所述,您可以使用@RequestBody注释来解决此限制。

public String process(@RequestBody List<JavaBean> javaBeans)

这需要POST请求,要么以不同的格式(例如JSON)发送数据,要么实现自己的消息转换器。