ajax 入参为list_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 })

@ResponseBodypublic void saveu( @RequestBody List users ){ //此时的user是map数据,并没有解析为bean//不建议使用

System.out.println(users) ;

}

使用如下方法,可以使用bean

@RequestMapping(value= "saveUser", method ={RequestMethod.POST })

@ResponseBodypublic voidsaveu( @RequestBody User[] users ){

System.out.println(users.getName()) ;//此时的user是实体bean

}

第二种方式 传递的键值对

jsp同上

另外一种:

@RequestMapping(value= "saveUser", method ={RequestMethod.POST })

@ResponseBodypublic void saveu( @RequestBody List> users ){ //spring MVC只能解析外层的json格式,内部的bean转化为Map格式的键值对,需要对map解析

List userList = new ArrayList();for(Mapmap : users){

User u= newUser();

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 })

@ResponseBodypublic voidsaveu( String users , String aa ){

System.out.println(users) ;

}

转载自 https://blog.csdn.net/alan_alei/article/details/73361104

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值