http://jxd-zxf.iteye.com/blog/2072300/
集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合。以下列举接收List<String>、List<User>、List<Map<String,Object>>、User[]、User(bean里面包含List)几种较为复杂的集合参数示例:
比如以前经常用的form表单提交,要达到复杂类型,传值,也可以拼写成一个json 字符串放在一个input隐藏域 中(这是在不能用json表单提交的时候特殊用法)
但要到后台转对应对象
dateType 客户端希望返回的类型,
contentType : 'application/json;charset=utf-8', 请求发送的内容类型
•接收List<String>集合参数:
1、页面js代码:
Js代码 复制代码 收藏代码
1.var idList = new Array();
2.idList.push(“1”);
3.idList.push(“2”);
4.idList.push(“3”);
5.var isBatch = false;
6.$.ajax({
7. type: "POST",
8. url: "<%=path%>/catalog.do?fn=deleteCatalogSchemes",
9. dataType: 'json',
10. data: {"idList":idList,"isBatch":isBatch},
11. success: function(data){
12. …
13. },
14. error: function(res){
15. …
16. }
17.});
2、Controller方法:
Java代码 复制代码 收藏代码
1.@Controller
2.@RequestMapping("/catalog.do")
3.public class CatalogController {
4.
5. @RequestMapping(params = "fn=deleteCatalogSchemes")
6. @ResponseBody
7. public AjaxJson deleteCatalogSchemes(@RequestParam("idList[]") List<String> idList,Boolean isBatch) {
8. …
9. }
10.}
• 接收List<User>、User[]集合参数:
1、User实体类:
Java代码 复制代码 收藏代码
1.public class User {
2. private String name;
3. private String pwd;
4. //省略getter/setter
5.}
2、页面js代码:
Js代码 复制代码 收藏代码
1.var userList = new Array();
2.userList.push({name: "李四",pwd: "123"});
3.userList.push({name: "张三",pwd: "332"});
4.$.ajax({
5. type: "POST",
6. url: "<%=path%>/catalog.do?fn=saveUsers",
7. data: JSON.stringify(userList),//将对象序列化成JSON字符串
8. dataType:"json",
9. contentType : 'application/json;charset=utf-8', //设置请求头信息
10. success: function(data){
11. …
12. },
13. error: function(res){
14. …
15. }
16.});
3、Controller方法:
Java代码 复制代码 收藏代码
1.@Controller
2.@RequestMapping("/catalog.do")
3.public class CatalogController {
4.
5. @RequestMapping(params = "fn=saveUsers")
6. @ResponseBody
7. public AjaxJson saveUsers(@RequestBody List<User> userList) {
8. …
9. }
10.}
如果想要接收User[]数组,只需要把saveUsers的参数类型改为@RequestBody User[] userArray就行了。
•接收List<Map<String,Object>>集合参数:
1、页面js代码(不需要User对象了):
Js代码 复制代码 收藏代码
1.var userList = new Array();
2.userList.push({name: "李四",pwd: "123"});
3.userList.push({name: "张三",pwd: "332"});
4.$.ajax({
5. type: "POST",
6. url: "<%=path%>/catalog.do?fn=saveUsers",
7. data: JSON.stringify(userList),//将对象序列化成JSON字符串
8. dataType:"json",
9. contentType : 'application/json;charset=utf-8', //设置请求头信息
10. success: function(data){
11. …
12. },
13. error: function(res){
14. …
15. }
16.});
2、Controller方法:
Java代码 复制代码 收藏代码
1.@Controller
2.@RequestMapping("/catalog.do")
3.public class CatalogController {
4.
5. @RequestMapping(params = "fn=saveUsers")
6. @ResponseBody
7. public AjaxJson saveUsers(@RequestBody List<Map<String,Object>> listMap) {
8. …
9. }
10.}
• 接收User(bean里面包含List)集合参数:
1、User实体类:
Java代码 复制代码 收藏代码
1.public class User {
2. private String name;
3. private String pwd;
4. private List<User> customers;//属于用户的客户群
5 private Stuent stuent; //学生
6. //省略getter/setter
7.}
2、页面js代码:
Js代码 复制代码 收藏代码
1.var customerArray = new Array();
2.customerArray.push({name: "李四",pwd: "123"});
3.customerArray.push({name: "张三",pwd: "332"});
4.var user = {}; var stu{name: "ce",id: "123"};
5.user.name = "李刚";
6.user.pwd = "888";
7.user. customers = customerArray;
8.$.ajax({
9. type: "POST",
10. url: "<%=path%>/catalog.do?fn=saveUsers",
11. data: JSON.stringify(user),//将对象序列化成JSON字符串
12. dataType:"json",
13. contentType : 'application/json;charset=utf-8', //设置请求头信息
14. success: function(data){
15. …
16. },
17. error: function(res){
18. …
19. }
20.});
这是最近项目中实际的用法
public void saveUpdateHouse(@RequestBody HousingInfo houseInfo){后台接受的参数
var str=JSON.stringify( getList()); var resultJson={}; var urls=obj.attr("action"); var array = obj.serializeArray(); $(array).each(function () { resultJson[this.name]=this.value; }); resultJson["links"]= getList(); var jsonstr=(JSON.stringify(resultJson)); $.ajax({ url:urls, data:jsonstr, type:'post', contentType : 'application/json;charset=utf-8', }).done(function(data){ if(!data.length){ return; }
3、Controller方法:
Java代码 复制代码 收藏代码
1.@Controller
2.@RequestMapping("/catalog.do")
3.public class CatalogController {
4.
5. @RequestMapping(params = "fn=saveUsers")
6. @ResponseBody
7. public AjaxJson saveUsers(@RequestBody User user) {
8. List<User> customers = user.getCustomers();
9. …
10. }
11.}