springMVC通过ajax传递参数list对象或传递数组对象到后台
Posted LinVan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springMVC通过ajax传递参数list对象或传递数组对象到后台相关的知识,希望对你有一定的参考价值。
springMVC通过ajax传递参数list对象或传递数组对象到后台
环境:
- 前台传递参数到后台
- 前台使用ajax
- 后台使用springMVC
- 传递的参数是N多个对象
JSON对象和JSON字符串
在SpringMVC环境中,@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。
然而在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串。
同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端!
Content-Type
服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,
而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,
所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。
jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,
如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。
第一种方式 传递的参数Bean
jsp文件: $("#saveuddd").click(function(){ var saveDataAry=[]; var data1={"name":"test","password":"gz"}; var data2={"name":"ququ","password":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url: basePath + "/user/saveUser", dataType:"json", contentType:"application/json", // 指定这个协议很重要 data:JSON.stringify(saveDataAry), //只有这一个参数,json格式,后台解析为实体,后台可以直接用 success:function(data){ } }); })
java文件 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody public void saveu( @RequestBody List<User> users ){ //此时的user是map数据,并没有解析为bean // 不建议使用 System.out.println(users) ; } 使用如下方法,可以使用bean @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody public void saveu( @RequestBody User[] users ){ System.out.println(users.getName()) ; // 此时的user是实体bean }
第二种方式 传递的键值对
jsp同上 另外一种: @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody public void saveu( @RequestBody List<Map<String,String>> users ){ // spring MVC只能解析外层的json格式,内部的bean转化为Map格式的键值对,需要对map解析 List<User> userList = new ArrayList<User>(); for(Map<String,String> map : users){ User u = new User(); u.setName(map.get("name")); u.setPassword(map.get("password")); userList.add(u); } // 这里就可以使用 userList 了 }
第三种方式
能够传递多个参数,但是每一个参数都是字符串(bean类型的数据会转化为JSON格式的字符串)
jsp文件 $("#saveuddd").click(function(){ var saveDataAry=[]; var data1={"name":"test","password":"gz"}; var data2={"name":"ququ","password":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url: basePath + "/user/saveUser", dataType:"json", data:{users:JSON.stringify(saveDataAry),aa:"ddd"}, // 可以传递多个参数,但此时的users内容与另外一个参数:aa 的内容一起传递,所以后台解析为字符串 // 后台接收的users内容:[{"name":"test","password":"gz"},{"name":"ququ","password":"gr"}] // 后台接收的 aa 内容:"ddd" success:function(data){ } }); })
java文件 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody public void saveu( String users , String aa ){ System.out.println(users) ; }
转载自 https://blog.csdn.net/alan_alei/article/details/73361104
以上是关于springMVC通过ajax传递参数list对象或传递数组对象到后台的主要内容,如果未能解决你的问题,请参考以下文章