springmvc controller层接收List类型的参数

   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 接收List<String>集合参数
前台通过ajax传输数据

    var allFilePaths = new Array();
     
    for (var i = 0; i < 10; i++) {
        allFilePaths.push("xx"+i);
    }
    $.ajax({  
        url : url,
        type : 'POST',
        dataType: 'json',
        contentType: "application/json",   //ajax默认是application/x-www-form-urlencoded  需要注意
        data : JSON.stringify(allFilePaths),//转为json格式
        success : function(col) {
     
        }
        },
        error : function(col){
                }
    });

controller层

    @RequestMapping("/delFileInfo")
    @ResponseBody
    public void delFileInfo(@RequestBody List<String> macroPath) throws IOException
        {
     
            for(String sPath :macroPath)
            {
                System.out.println(sPath);
            }
        }

 

第二种类型:把要传递的集合封装成一个List对象或其他,可以达到传递List的目的

js层:

    Order.delOrders({orderIds: $scope.ids}, function () {  
        Flash.success('删除成功!');  
        $state.reload();  
    });  

viewmodel层:

    public class ListObj {  
        private List<String> orderIds ;  
      
        public List<String> getOrderIds() {  
            return orderIds;  
        }  
      
        public void setOrderIds(List<String> orderIds) {  
            this.orderIds = orderIds;  
        }  
    }  

Controller层:

    @RequestMapping(value = "/delOrders")  
        @ResponseBody  
        public ViewData deleteOrders(@RequestBody ListObj orderIds, HttpServletRequest request) {  
      
            ViewData viewData = new ViewData();  
            for (String orderId:orderIds.getOrderIds()){  
                System.out.println(orderId);  
            }  
      
    //        String[] arr = orderIds.split(",");  
    //        ViewData viewData = adminOrderService.deleteOrders(Arrays.asList(arr),getLoginInfo(request));  
            return viewData;  
        }  

 第三种类型:接收List<User>、User[]集合参数:

User实体类:

    public class User {  
            private String name;   
        private String pwd;  
        //省略getter/setter  
    }  

页面js代码:

    var userList = new Array();  
    userList.push({name: "李四",pwd: "123"});   
    userList.push({name: "张三",pwd: "332"});   
    $.ajax({  
        type: "POST",  
        url: "<%=path%>/catalog.do?fn=saveUsers",  
        data: JSON.stringify(userList),//将对象序列化成JSON字符串  
        dataType:"json",  
        contentType : 'application/json;charset=utf-8', //设置请求头信息  
        success: function(data){  
            …  
        },  
        error: function(res){  
            …  
        }  
    });  

Controller方法:

    @Controller  
    @RequestMapping("/catalog.do")  
    public class CatalogController {  
      
        @RequestMapping(params = "fn=saveUsers")  
        @ResponseBody  
        public AjaxJson saveUsers(@RequestBody List<User> userList) {  
            …  
        }  
    }  

如果想要接收User[]数组,只需要把saveUsers的参数类型改为@RequestBody User[] userArray就行了。

 
第4种类型:接收List<Map<String,Object>>集合参数:

页面js代码(不需要User对象了):

    var userList = new Array();  
    userList.push({name: "李四",pwd: "123"});   
    userList.push({name: "张三",pwd: "332"});   
    $.ajax({  
        type: "POST",  
        url: "<%=path%>/catalog.do?fn=saveUsers",  
        data: JSON.stringify(userList),//将对象序列化成JSON字符串  
        dataType:"json",  
        contentType : 'application/json;charset=utf-8', //设置请求头信息  
        success: function(data){  
            …  
        },  
        error: function(res){  
            …  
        }  
    });  

Controller方法:

    @Controller  
    @RequestMapping("/catalog.do")  
    public class CatalogController {  
      
        @RequestMapping(params = "fn=saveUsers")  
        @ResponseBody  
        public AjaxJson saveUsers(@RequestBody List<Map<String,Object>> listMap) {  
            …  
        }  
    }  

 第五种类型:接收User(bean里面包含List)集合参数:

User实体类:

    public class User {  
        private String name;   
        private String pwd;  
        private List<User> customers;//属于用户的客户群  
        //省略getter/setter  
    }  

页面js代码:

    var customerArray = new Array();  
    customerArray.push({name: "李四",pwd: "123"});   
    customerArray.push({name: "张三",pwd: "332"});   
    var user = {};  
    user.name = "李刚";  
    user.pwd = "888";  
    user. customers = customerArray;  
    $.ajax({  
        type: "POST",  
        url: "<%=path%>/catalog.do?fn=saveUsers",  
        data: JSON.stringify(user),//将对象序列化成JSON字符串  
        dataType:"json",  
        contentType : 'application/json;charset=utf-8', //设置请求头信息  
        success: function(data){  
            …  
        },  
        error: function(res){  
            …  
        }  
    });  

  Controller方法:

    @Controller  
    @RequestMapping("/catalog.do")  
    public class CatalogController {  
      
        @RequestMapping(params = "fn=saveUsers")  
        @ResponseBody  
        public AjaxJson saveUsers(@RequestBody User u

猜你喜欢

转载自www.cnblogs.com/zouhong/p/11782235.html