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<String>集合参数

第一种方法:直接接收list

前台通过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",
    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就行了。

接收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 user) {  
        List<User> customers = user.getCustomers();  
        …  
    }  
} 

参考: http://blog.csdn.net/u014656173/article/details/77073753

           http://blog.csdn.net/yapingge2014/article/details/49820803

           http://jxd-zxf.iteye.com/blog/2072300






  • 15
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring MVC接收日期格式的方法有几种。其一种是使用Converter接口来自定义日期类型转换。通过实现Converter接口,可以将一个String类型的日期参数转换为Date类型。 另外一种方式是使用@DateTimeFormat注解来指定日期的格式。在Controller的方法参数上使用@DateTimeFormat注解,并指定日期的格式,Spring MVC会自动将String类型的日期参数转换为指定格式的Date类型。 如果需要同时接收多种格式的日期参数,可以在方法参数上使用多个@DateTimeFormat注解,每个注解都指定一个日期格式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springMvc接受日期类型参数处理](https://blog.csdn.net/z69183787/article/details/52780611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringMVC之日期类型参数传递](https://blog.csdn.net/qq_61313896/article/details/128862433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值