Springboot-控制层入参对象,属性值全部为null,解决方案

发布时间 2023-10-21 00:36:13作者: 向大海

前言:

  在一般的正常操作场景中,我们接受参数是没有问题的。

  在特定的场景中,我们会出现接受入参全部为null的情况(这里记录)。

  在这里我们尝试使用3种方法解决。

出现的问题:

  Springboot中控制层 接受入参对象,属性全部显示为null。

实体类:

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class User {
    /** 名称*/
    private String NAME;

    /** 年龄*/
    private Integer AGE;

    /**性别*/
    private String SEX;

}

 

postman发送的请求:

 IDEA中的入参:

 

解决1:

   步骤:

    1、使用注解

  /** 名称*/
    @JsonProperty(value = "NAME")
    private String NAME;

 

     2、注解所在包

import com.fasterxml.jackson.annotation.JsonProperty;

 

    3、添加注解后效果:

解决2:

   遵循阿里巴巴开发手册规范,实体类属性名首字母小写。

postman请求:

 

 效果如下:

实体类:

import lombok.Data;

@Data
public class User {
    /** 名称*/
    private String name;

    /** 年龄*/
    private Integer age;

    /**性别*/
    private String sex;
}

 

解决3:

  修改控制层入参 JSONObject

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gao.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("user")
public class UserController {

    @PostMapping("/saveUser")
    public void saveUser(@RequestBody JSONObject jsonObject){
        log.info("用户控制层,入参:{}",jsonObject);
        String s = jsonObject.toJSONString();
        User user = JSON.parseObject(s, User.class);
        System.out.println(user);

        // TODO:其他业务操作
    }
}

效果如下:

 pom.xml

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.74</version>
        </dependency>

 

 

实现入参为null的源码:

实体类:

import lombok.Data;

@Data
public class User {
    /** 名称*/
    private String NAME;

    /** 年龄*/
    private Integer AGE;

    /**性别*/
    private String SEX;

}

 

控制层:

@Slf4j
@RestController
@RequestMapping("user")
public class UserController {


    @PostMapping("/saveUser")
    public void saveUser(@RequestBody User user){
        log.info("用户控制层,入参:{}",user);
        System.out.println(user);

        // TODO:其他业务操作

    }

}

 

pom.xml:

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>