该注解是SpringMVC的一个注解,通常用于控制层方法上面请求参数前。
该注解有什么作用?
用于将 HTTP 请求的请求体绑定到方法参数上,通常用于接收 POST 请求的数据。在 Spring MVC 中,使用 @RequestBody 注解可以将请求体中的 JSON 或 XML 数据自动转换为 Java 对象。
如何使用?
@ApiOperation(value = "", notes = "新增问题")
@PostMapping(value = "add")
public Result add(@RequestBody Question question) {
System.out.println(question);
return Result.ok();
}
看到这,大家一定都没啥问题,觉得也是比较简单。但是我们心中也可能有疑问——我们在什么时候需要使用到这个注解?
接下来我们将通过举例来进行探索
我们在什么时候需要使用到这个注解?
- @RequestBody处理的参数类型及编码为:aplication/json或者是application/xml,我们在前端进行ajax请求时通过设置请求头中的contentType属性来指定
- 在进行参数传递的时候,前端需要对传输的JSON对象要使用JSON.stringify()进行转换,该方法可以将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串。
测试1 contentType+注解
后端
@ApiOperation(value = "", notes = "新增问题")
@PostMapping(value = "add")
public Result add(@RequestBody Question question) {
System.out.println(question);
return Result.ok();
}
前端
let question = {"id": "1001", "title": "测试添加"}
$.ajax({
url: "question/add",
method: "post",
data: JSON.stringify(question),
contentType: 'application/json',
dataType: "json",
success(e) {
console.log(e)
},
error() {
alert("系统异常,请联系管理员。")
})
我们直接进行访问,并查看控制台信息
通过测试,前后端均运行正常


测试2 只使用注解
注意:前端传输的data直接是对象
后端
@ApiOperation(value = "", notes = "新增问题")
@PostMapping(value = "add")
public Result add(@RequestBody Question question) {
System.out.println(question);
return Result.ok();
}
前端
let question = {"id": "1001", "title": "测试添加"}
$.ajax({
url: "question/add",
method: "post",
data: question,
dataType: "json",
success(e) {
console.log(e)
},
error() {
alert("系统异常,请联系管理员。")
})
结果失败,并提示contentType错误。


测试3 只设置contentType
前端
let question = {"id": "1001", "title": "测试添加"}
$.ajax({
url: "question/add",
method: "post",
data: question,
contentType: 'application/json',
dataType: "json",
success(e) {
console.log(e)
},
error() {
alert("系统异常,请联系管理员。")
})
后端
@ApiOperation(value = "", notes = "新增问题")
@PostMapping(value = "add")
public Result add(Question question) {
System.out.println(question);
return Result.ok();
}
结果依然失败,接受参数为null


测试4 均不设置
后端
@ApiOperation(value = "", notes = "新增问题")
@PostMapping(value = "add")
public Result add(Question question) {
System.out.println(question);
return Result.ok();
}
前端
let question = {"id": "1001", "title": "测试添加"}
$.ajax({
url: "question/add",
method: "post",
data: question,
dataType: "json",
success(e) {
console.log(e)
},
error() {
alert("系统异常,请联系管理员。")
})
测试成功


总结
- 前端contentType为 aplication/json 或者是 application/xml 就需要使用@RequestBody
- 不是的话,就不使用,以免出现空对象的问题。
今天的分享到此结束,感谢你的支持!!!
1968





