这篇文章主要是帮助刚刚入行的猿猿尽快适应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格式与SpringMVC接收实体类的对应关系-LMLPHP
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格式与SpringMVC接收实体类的对应关系-LMLPHP
json

{
"isAgree":false,
"user":{
"name":"adun",
"age":18
}
}
05-23 13:37