這篇文章主要是幫助剛剛入行的猿猿盡快適應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
}
}