SpringMVC接收復雜集合參數

原博客地址:http://jxd-zxf.iteye.com/blog/2072300 

Spring MVC在接收集合請求參數時,需要在Controller方法的集合參數裏前添加@RequestBody,而@RequestBody默認接收的enctype (MIME編碼)application/json,因此發送POST請求時需要設置請求報文頭信息,否則Spring MVC在解析集合請求參數時不會自動的轉換成JSON數據再解析成相應的集合。以下列舉接收List<String>、List<User>、List<Map<String,Object>>、User[]、User(bean裏面包含List)幾種較爲複雜的集合參數示例:

  • 接收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.     //省略getter/setter  
  6. }  

 

2、頁面js代碼:

 

Js代碼  收藏代碼
  1. var customerArray = new Array();  
  2. customerArray.push({name: "李四",pwd: "123"});   
  3. customerArray.push({name: "張三",pwd: "332"});   
  4. var user = {};  
  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. });  

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

 

發佈了55 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章