前端传递的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
    }
}
posted @ 2020-08-21 22:58  debug的勇士  阅读(761)  评论(0编辑  收藏  举报