这篇文章主要是帮助刚刚入行的猿猿尽快适应Restful风格的搬砖生活
@RequestBody注解
基本介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
原理:请求由DispatcherServlet处理,找到相应的HandlerAdapter进行处理,RequestMappingHandlerAdapter会处理@RequestMapping注解的请求,设置一系列参数解析器进行解析,如果参数使用@RequestBody注解,则使用RequestResponseBodyMethodProcessor进行解析,此参数解析器用HttpMessageConverter将HttpMessage封装为具体的JavaBean对象,json格式的数据使用AbstractJackson2HttpMessageConverter进行解析,内部使用jackson进行json数据的解析;其实就是SpringMVC的执行过程
@RequestBody基本使用
@RequestBody原理
(1)当后端接收的是一个单独的实体类【这里不做过多解释,代码可以体会】
就是这种实体类,里面不包含实体类信息
package com.activiti.domain;
/**
* @author zhudunfeng
* @date 2020/8/20 22:20
*/
public class MyData {
private String isAgree;
public String getIsAgree() {
return isAgree;
}
public void setIsAgree(String isAgree) {
this.isAgree = isAgree;
}
@Override
public String toString() {
return "MyData{" +
"isAgree='" + isAgree + '\'' +
'}';
}
}
这种的Restful接口就是直接使用@RequestBody注解进行接收即可,我在这里就简单说一下@RequestBody注解,
Controller层方法
@PostMapping("/test/entity")
public void testEntity(@RequestBody MyData myData){
String isAgree = myData.getIsAgree();
Boolean aBoolean = Boolean.valueOf(isAgree);
System.out.println(isAgree);
}
postman测试
json
{
"isAgree":false
}
(2)当一个实体类包含另一个实体类
主实体类
package com.activiti.domain;
/**
* @author zhudunfeng
* @date 2020/8/20 22:20
*/
public class MyData {
private String isAgree;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getIsAgree() {
return isAgree;
}
public void setIsAgree(String isAgree) {
this.isAgree = isAgree;
}
@Override
public String toString() {
return "MyData{" +
"isAgree='" + isAgree + '\'' +
'}';
}
}
子实体类
package com.activiti.domain;
/**
* @author zhudunfeng
* @date 2020/8/21 17:30
*/
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
controller层
@PostMapping("/test/entity")
public void testEntity(@RequestBody MyData myData){
String isAgree = myData.getIsAgree();
Boolean aBoolean = Boolean.valueOf(isAgree);
System.out.println(isAgree);
System.out.println(myData.getUser().toString());
}
postman测试
json
{
"isAgree":false,
"user":{
"name":"adun",
"age":18
}
}