1. 程式人生 > >SpringMVC接收復雜集合引數【轉載】

SpringMVC接收復雜集合引數【轉載】

宣告:本部落格轉載於博主“jxd_zxf”的部落格,原文章連結: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.     @RequestMapping(params = "fn=deleteCatalogSchemes")  
  5.     @ResponseBody  
  6.     public AjaxJson deleteCatalogSchemes(@RequestParam("idList[]") List<String> idList,Boolean isBatch) {  
  7.             …  
  8.     }  
  9. }  
  •  接收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.     @RequestMapping(params = "fn=saveUsers")  
  5.     @ResponseBody  
  6.     public AjaxJson saveUsers(@RequestBody List<User> userList) {  
  7.         …  
  8.     }  
  9. }  

    如果想要接收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.     @RequestMapping(params = "fn=saveUsers")  
  5.     @ResponseBody  
  6.     public AjaxJson saveUsers(@RequestBody List<Map<String,Object>> listMap) {  
  7.         …  
  8.     }  
  9. }  
  •  接收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.     @RequestMapping(params = "fn=saveUsers")  
  5.     @ResponseBody  
  6.     public AjaxJson saveUsers(@RequestBody User user) {  
  7.         List<User> customers = user.getCustomers();  
  8.         …  
  9.     }  
  10. }