springmvc 复杂类型

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值