本篇探索@RequestBody注解,简单Ajax
@RequestBody
本注解可以拿到请求体的数据并封装到数据中,可以封装到一个字符串中,也可以封装到实体bean中,但是在封装到实体中失败了
$(document).ready(function () {
$("h1").hide();
$("#bb").click(function () {
$.ajax({
url:"/SSM/Ajax/ajax",
type:"post",
data:{'username':'Jack','password':'123456'},
dataType:"json",
success:function (data) {
console.log(data)
},
error:function () {
alert("失败了、、")
}
})
})
}
);
以下绑定实体bean时没有用到该注解,完全可以运行,而如果加了注解,反而报错
@RequestMapping("/ajax")
@ResponseBody
public User ajax(User user1){
System.out.println(user1);
user1.setSex("man");
return user1;
}
后来发现SpringMVC的该注解需要依赖Jackson,所以导入Jaskson的jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
此时更改前台代码,注意这里的json数据我已经抽离出来并使用JSON.stringify()方法操作了,原因是我在上传数据时总报400错误,可能是我的json数据不合规范
正确的JSON是这样的:属性名必须用双引号包裹
var json={'username':'Jack','password':'dsf'};
$(document).ready(function () {
$("h1").hide();
$("#bb").click(function () {
$.ajax({
url:"/SSM/Ajax/ajax",
type:"post",
data:JSON.stringify(json),
contentType:"application/json",
dataType:"json",
success:function (data) {
console.log(data)
},
error:function () {
alert("失败了、、")
}
})
})
}
);
后台如下,只加了一个注解
@RequestMapping(value = "/ajax",method = RequestMethod.POST)
@ResponseBody
public User ajax(@RequestBody User user1){
System.out.println(user1);
user1.setSex("man");
return user1;
}
不使用@RequestBody注解时,可以接收Content-Type为application/x-www-form-urlencoded类型的请求所提交的数据,数据格式:aaa=111 b b b = 222 。 f o r m 表 单 提 交 以 及 j Q u e r y 的 bbb=222。form表单提交以及jQuery的 bbb=222。form表单提交以及jQuery的.post()方法所发送的请求就是这种类型。
使用@RequestBody注解时,用于接收Content-Type为application/json类型的请求,数据类型是JSON:{“aaa”:“111”,“bbb”:“222”}
正确的JSON是这样的:属性名必须用双引号包裹