Spring MVC 如何接收前端各种参数

 Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)application/json,因此发送POST请求时需要设置请求报文头信息,并且传值必须JSON.stringify转为json字符串,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合。以下列举接收List<String>List<User>List<Map<String,Object>>User[]User(bean里面包含List)几种较为复杂的集合参数示例:

一.  参数类型var param = {'list':List<String>,''name":"li","age":12,...}


  1. var list= new Array();  
  2. list.push(“1”);   
  3. list.push(“2”);   
  4. list.push(“3”);  
  5. $.ajax({  
  6.     type: "POST",  
  7.     url: "???",  
  8.     dataType: 'json',  
  9.     data: {"list":list,"name":"li","age":12},  
  10.     success: function(data){  
  11.         …  
  12.     },  
  13.     error: function(res){  
  14.         …  
  15.     }  
  16. }); 

List中是基本的数据类型,不是对象,Controller中方法:
 public Object do(@RequestParam("list[]") List<String> list,String name,int age) {  }


二 .var param = {'list':List<User>,''bossName":"ai","age":12,...}
  1. var list= new Array();  
  2. list.push({"id":1,"address":"jinan","sex":"male","name":"li"});   
  3. list.push({"id":2,"address":"jinan","sex":"male","name":"gi"});   
  4. list.push({"id":3,"address":"jinan","sex":"male","name":"hi"});  
  5. $.ajax({  
  6.     type: "POST",  
  7.     url: "???",  
  8.     dataType: 'json',  
  9.     data: {"list":JSON.stringify(list),"bossName":"li","age":"12"},  //list中是对象 在controller中 使用                //request.getParameter("list")获得这个对象列表
  10.     success: function(data){  
  11.         …  
  12.     },  
  13.     error: function(res){  
  14.         …  
  15.     }  
  16. }); 
   Controller中方法  在方法中也可以通过@RequestParam("list")获得String类型的list,或者通过request.getParameter("list")获得,然后再使用Json的工具类把list 转为对象列表 
 public Object do(@RequestParam(HttpServletRequest request, HttpServletResponse response,@RequestParam("list") String s) { 
       String bossName= request.getParameter("bossName");
String age= request.getParameter("age");
String list= request.getParameter("list");

  }

三 。接收List<User>、User[]集合参数  参数类型 var param = List<User> ;

    1. var list= new Array();  
    2. list.push({"id":1,"address":"jinan","sex":"male","name":"li"});   
    3. list.push({"id":2,"address":"jinan","sex":"male","name":"gi"});   
    4. list.push({"id":3,"address":"jinan","sex":"male","name":"hi"});  
    5. $.ajax({  
    6.     type: "POST",  
    7.     url: "???",  
    8.     dataType: 'json',  
    9.     data: JSON.stringify(list)
    10.     contentType:'application/json;charset=utf-8',  // controller中使用@RequestBody接收数据,需要定义contentType,
    11.     success: function(data){  
    12.         …  
    13.     },  
    14.     error: function(res){  
    15.         …  
    16.     }  
    17. }); 
Controller中方法 使用@RequestBody  可以直接得到解析后的对象列表, 如果想要接收User[]数组,只需要把do方法的参数类型改为@RequestBody User[] list就行了。
public Object do(HttpServletRequest request, HttpServletResponse response,@RequestBody List<User> list) { 

   List<User> user = list;
   User[] user = list;  // @RequestBody User[] list
  }


四 。 接收 List<Map<String,Object>> 集合参数和情况三类似:
  1. var list= new Array();  
  2. list.push({"id":1,"address":"jinan","sex":"male","name":"li"});   
  3. list.push({"id":2,"address":"jinan","sex":"male","name":"gi"});   
  4. list.push({"id":3,"address":"jinan","sex":"male","name":"hi"});  
  5. $.ajax({  
  6.     type: "POST",  
  7.     url: "???",  
  8.     dataType: 'json',  
  9.     data: JSON.stringify(list), 
  10.     contentType:'application/json;charset=utf-8',  // controller中使用@RequestBody接收数据,需要定义contentType,
  11.     success: function(data){  
  12.         …  
  13.     },  
  14.     error: function(res){  
  15.         …  
  16.     }  
  17. }); 
Controller中方法 

public Object do(HttpServletRequest request, HttpServletResponse response,@RequestBodyList<Map<String,Object> list) { 

   List<Map<String,Object> map= list;
  }

五  。 接收Boss (bean里面包含employee )集合参数:

  1. var employee new Array();  
  2. employee .push({"id":1,"address":"jinan","sex":"male","name":"li"});   
  3. employee .push({"id":2,"address":"jinan","sex":"male","name":"gi"});   
  4. employee .push({"id":3,"address":"jinan","sex":"male","name":"hi"});  
  5. var boss = {};
  6. boss.bossName = "ai";
  7. boss.age = "28";
  8. boss.employee = list;
  9. $.ajax({  
  10.     type: "POST",  
  11.     url: "???",  
  12.     dataType: 'json',  
  13.     data: JSON.stringify(boss), 
  14.     contentType:'application/json;charset=utf-8',  // controller中使用@RequestBody接收数据,需要定义contentType,
  15.     success: function(data){  
  16.         …  
  17.     },  
  18.     error: function(res){  
  19.         …  
  20.     }  
  21. }); 

Controller中方法  能够直接获得员工的对象列表

public Object do(HttpServletRequest request, HttpServletResponse response,@RequestBody Boss boss) { 

   List<Employee> employee = boss.getEmployee();
  }

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值