随笔 - 832  文章 - 2  评论 - 31  阅读 - 167万

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)几种较为复杂的集合参数示例:

1
<strong>第一种类型:直接接收list <strong>接收List<String>集合参数</strong></strong>
1
前台通过ajax传输数据<br><br>    var allFilePaths = new Array();<br>     <br>    for (var i = 0; i < 10; i++) {<br>        allFilePaths.push("xx"+i);<br>    }<br>    $.ajax({  <br>        url : url,<br>        type : 'POST',<br>        dataType: 'json',<br>        contentType: "application/json",   //ajax默认是application/x-www-form-urlencoded  需要注意<br>        data : JSON.stringify(allFilePaths),//转为json格式<br>        success : function(col) {<br>     <br>        }<br>        },<br>        error : function(col){<br>                }<br>    });<br><br>controller层<br><br>    @RequestMapping("/delFileInfo")<br>    @ResponseBody<br>    public void delFileInfo(@RequestBody List<String> macroPath) throws IOException<br>        {<br>     <br>            for(String sPath :macroPath)<br>            {<br>                System.out.println(sPath);<br>            }<br>        }<br><br>

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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[]集合参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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>>集合参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
页面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) { 
            … 
        
<strong>    } 
</strong>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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处理:

 

 

 

posted on   小破孩楼主  阅读(14084)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示