SpringMVC @RequestBody 接收Json 对象字符串

@RequestBody接收的是一个json对象的字符串,而不是一个接送对象,但是ajax请求中往往传的是json对象,通过使用JSON.stringify(data)的方式就能将对象变为字符串,同时ajax请求的时候也要指定dataType: “json”,contentType:”application/json” 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

json对象和json字符串的js变化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
parse用于从一个字符串中解析出json对象,如
var str = '{"name":"huangxiaojian","age":"23"}'
结果:
JSON.parse(str)

Object
age: "23"
name: "huangxiaojian"
__proto__: Object

注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
stringify()用于从一个对象解析出字符串,如
var a = {a:1,b:2}
结果:
JSON.stringify(a)
"{"a":1,"b":2}"

Ajax传递json字符串到后台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript">  
$(document).ready(function(){
var DataArray=[];
var data1={"userName":"wangkangning","address":"guangzhou"};
var data2={"userName":"wangchao","address":"chengdu"};
DataArray.push(data1);
DataArray.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",//发送至服务器时的内容编码格式。
data:JSON.stringify(DataArray),
success:function(data){ //请求成功后的回调函数。
}
error:function()
{alert("error");}
});
});
</script>

RequestBody 接收Json字符串并绑定(相同名称进行绑定)

1
2
3
4
5
6
7
8
9
10
11
12
13
@RequestMapping(value = "user/saveUser", method = RequestMethod.POST) 
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
//使用Jackson库进行处理
ObjectMapper mapper =new ObjectMapper();
for(int i=0;i<user.size();i++)
{
String json =mapper.writeValueAsString(users[i]); //将user对象转换为json输出。
}
User user = new User();
user = mapper.readValue(json,User.class); //将json转换为json对象。
System.out.println(user);
}