前端傳遞的json格式與SpringMVC接收實體類的對應關系


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM