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处理:

springmvc controller层接收List类型的参数的更多相关文章

  1. springMVC怎么接收日期类型的参数?

    springMVC怎么接收日期类型的参数? springMVC的controller中用实体接受页面传递的参数,并且实体中的属性类型为日期类型,怎么接收呢?如果接收不到会进不到controller中. ...

  2. Spring+MVC Controller层接收App端请求的中文参数乱码问题。

    在正文之前,说明下Filter的作用: 过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理.通俗点说法filter相当于加油站,request是条路,response是条路,目的地是serv ...

  3. SpringMVC的controller层接收来自jsp页面通过<a href="/user/userUpdateInfo/>的中文乱码问题

    这种情况是,jsp页面的中文正常显示,数据的中文也是正常显示,但是在Controller层接收到的中文是乱码,如下图所示: 解决方法:在Controller层对前台传递的中文乱码进行处理,将它转换成u ...

  4. springMVC controller间跳转 重定向 传递参数的方法

    springMVC controller间跳转 重定向 传递参数的方法 spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参 ...

  5. springmvc,controller层在接收浏览器url传来的参数带中文乱码问题。

    请求地址:http://localhost:8080/saveFlashSale?fsRemark=哈哈哈哈哈 接收方法:@RequestMapping("/saveFlashSale&qu ...

  6. 重大发现 springmvc Controller 高级接收参数用法

    1.  数组接收 @RequestMapping(value="deleteRole.json") @ResponseBody public Object deleteRole(S ...

  7. form表单提交controller层接收到的值为乱码的问题

    今天遇到个中文乱码问题,大体情况是这样的:前台有一个form表单,其中有几个input的控件,值是带中文的,form表单只设置了id='form1' method='post'  action='xx ...

  8. SpringMVC Controller层的单元测试

    Getting Ready 测试相关Maven dependency如下: <dependency> <groupId>org.springframework</grou ...

  9. SpringBoot接收map类型的参数

    如果某个controller的某个接口的参数特别多,也可以使用map的方式来接收参数,接收之后使用get方法获取即可. 1)get请求方式,定义map接收方式 @RequestParam(requir ...

随机推荐

  1. 迁移历史sql数据

    --select * into Trade2018 from Aozzo_ODS..Trade t1 --where t1.Created<'2019-01-01' --创建索引 --creat ...

  2. Python连载27-log日志

    一.log 1.推荐网站:https://www.cnblogs.com/yyds/p/6901864.html 该网站为日志处理logging模块简介 2.logging模块提供模块级别的函数记录日 ...

  3. odoo action

    动作的加载: 刷新视图页面执行load_views方法 /web/dataset/call_kw/model_name/load_views 在odoo/models.py的BaseModel中有一个 ...

  4. ReentrantReadWriteLock三个线程读数据,三个线程写数据

    /*** * 三个线程读数据,三个线程写数据 * */ public class ReadWriteLockTest { public static void main(String[] args) ...

  5. IScroll自动计算高度代码

    setScrollHeight: function () { var temp_height = 0; temp_height = $("#" + this.wrapperId). ...

  6. grafana的用户及权限的配置

    一.概述 在上几篇文章中,已经在grafana中,配置了几个Dashboard.需要给开发人员查看,但是我又不想让开发人员,随便更改Dashboard中的配置.需要创建一个只读账号才行. 二.添加用户 ...

  7. 【leetcode-148】排序链表

    在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1: 输入: 4->2->1->3输出: 1->2->3->4示例 2: 输入: ...

  8. 使用VS Code远程开发

    今天看到园子里的一篇文章:VS Code Remote 发布!开启远程开发新时代,简单的看了一下,它可以直接利用本地的环境远程开发,最直接的好处有: 在部署相同的操作系统上进行开发,或者使用更大或更专 ...

  9. 在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

    基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份 ...

  10. vim操作:打开多个文件、同时显示多个文件、在文件之间切换

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen 便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...