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

前言:

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

  在特定的场景中,我们会出现接受入参全部为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>

 

 解决4:

  修改控制层入参为Map<String,String>

import cn.hutool.core.bean.BeanUtil;
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;

import java.util.Map;

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


    @PostMapping("/saveUser1")
    public void saveUser1(@RequestBody Map<String,String> map){
        log.info("用户控制层,入参:{}",map);
        User user = BeanUtil.mapToBean(map, User.class, false);
        System.out.println(user);

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

效果如下:

pom.xml添加

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</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>

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

application.properties

server.port=9999

 postman测试数据

127.0.0.1:9999/user/saveUser
{
    "NAME":"小高",
    "AGE":20,
    "SEX":"男"
}

 

 
 
 
 
posted @ 2023-10-21 00:31  向大海  阅读(1333)  评论(0编辑  收藏  举报