使用spring的requestBody实现List绑定
最近有很多一对多关系的表单需要保存,比如一个人有好几本书,他会在一个表单提交所有的数据,我的后台参数需要绑定一个List
。
下面是人和书的model:
1 2 3 4 5 6 7 8 9
| public class User {
private Integer id; private String name; private String groupId; private List<Book> books; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class Book {
private Integer id;
private Integer borrower;
private Integer booker;
private String bookName;
private Integer pageCount;
private Double price;
private String author;
private String press;
private Integer catgory;
|
我的后台参数就是User user
,其实用form提交也是可以的,只要把book的每一行设为books[i].bookName
这样也能提交,但是公司用的是EasyUI
的 dataGrid
,所以name就不能由我控制。于是我查了很多资料,有了下一种方法,使用 ajax
和@RequestBody
的方法提交。
在前台,我们用ajax
1 2 3 4 5 6 7 8 9 10 11 12
| $.ajax({ url : '/ztree/save', type : "post", data : JSON.stringify({ "name" : "a", "books" : [{"bookName":"a","price":12.3},{"bookName":"b"}] }), contentType : "application/json", beforeSend : function() { return $("#form").valid(); } });
|
我们把dataGrid
中的数据变为一个数组,然后将整个表单的数据变为一个json String,contentType
设置为 "application/json"
,需要校验表单就在ajax
的 beforeSend
中调用。
后台我们使用@RequestBody
来接受json
类型的数据
1 2 3 4 5 6
| @RequestMapping("save") @ResponseBody public String save(@RequestBody User user, HttpServletRequest request) { System.out.println(user.toString()); return "ztree"; }
|
这样就可以直接填充user
参数。