首先,我们来看一下@RequestBody在JSON格式中使用时需要注意的点(一定要区分开@RequestParam):
因此,当前端使用Ajax传入JSON对象到controller层的时候,一定要注意这两个键值对 contentType 和 dataType,并要求在data栏目中要定义的是一个JSON字符串的形式,其原因是因为@RequestBody是将我们前端传过来的JSON字符串通过转换为JSON格式,然后再将其转换为实体类映射到我们的参数列表对象中去,这里一定要注意使用的是JSON字符串的格式:
$.ajax({
//编写JSON格式,设置属性和值
url : "userController/testAjax",
contentType : "application/json;charset=UTF-8",
data : '{"username":"yangshiwen","password":"123456","age":30}',
dataType : "json",
type : "post",
success : function (data) {
//data是指服务器端响应的json数据,进行解析
alert(data);
alert(data.username);
alert(data.password);
alert(data.age);
}
});
然后,在controller层分别使用 :
@ResponseBody,返回一个对象给Ajax中的success函数。
@RequestBody,获取Ajax传过来的JSON字符串转换为对象映射为User实体类。
/**
* 模拟异步请求刷新
*/
@RequestMapping(value = "/testAjax")
@ResponseBody
//这里因为导入了jackSon,所以直接用user接收就行了
public User testAjax(@RequestBody User user){
System.out.println("testAjax测试方法执行了");
//客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中去了
System.out.println(user);
//做响应,模拟查询数据库,这里重新更新了user
user.setUsername("hahaha");
user.setAge(50);
user.setPassword("123456");
//做出响应
return user;
}
----------------------------------------
如果我们不想使用 @RequestBody 注解的话,就要使用标准的JSON格式:
$.ajax({
//编写JSON格式,设置属性和值
url : "userController/testAjax",
data : {"username":"yangshiwen","password":"123456","age":30},
type : "post",
success : function (data) {
//data是指服务器端响应的json数据,进行解析
alert(data);
alert(data.username);
alert(data.password);
alert(data.age);
}
});
其controller层代码如下:
/**
* 模拟异步请求刷新
*/
@RequestMapping(value = "/testAjax")
@ResponseBody
//这里因为导入了jackSon,所以直接用user接收就行了
public User testAjax(User user){
System.out.println("testAjax测试方法执行了");
//客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中去了
System.out.println(user);
//做响应,模拟查询数据库,这里重新更新了user
user.setUsername("hahaha");
user.setAge(50);
user.setPassword("123456");
//做出响应
return user;
}