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":"男"
}