zoukankan      html  css  js  c++  java
  • 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
    

     Map<String,Object>  map 类型 

     js处理:

  • 相关阅读:
    java web使用WebSocket
    solr的使用
    mybatis中模糊查询的实现方式
    Java反射的简单使用
    TCP/IP协议 资料整理
    Java单向链表的实现
    Spring boot使用JWT来做接口登录验证
    sql性能优化
    前端实践项目(四)使用koa搭建开发环境
    前端实践项目 目录
  • 原文地址:https://www.cnblogs.com/zouhong/p/11782235.html
Copyright © 2011-2022 走看看