Spring Boot REST API如何在JSON响应中包含Null值及响应缺失Null值的原因排查
问题原因与解决方案
这问题我之前做Spring Boot REST API时也碰到过,核心原因是Jackson的默认序列化规则会忽略值为null的字段,结合你的代码细节,具体分析和解决方法如下:
为什么null字段没出现在响应里?
Spring Boot默认使用Jackson作为JSON序列化工具,它的默认配置是NON_NULL——也就是只序列化值不为null的字段。你的User实体中empNo字段为null,经过ModelMapper映射到UserDTO后,DTO的empNo依然是null,Jackson就自动把这个字段从最终的JSON响应里剔除了,所以你看不到它。
另外注意到你的UserDTO里有fullName字段,但User实体中没有对应的属性,映射后这个字段值也是null,同样会被Jackson忽略;如果你希望它也出现在响应里,下面的方案也能一并解决。
解决方案
1. 全局配置(推荐,全项目生效)
如果你希望整个API的所有JSON响应都包含null字段,可以在配置文件里修改Jackson的规则:
- 若使用
application.properties:
spring.jackson.default-property-inclusion=ALWAYS
- 若使用
application.yml:
spring: jackson: default-property-inclusion: ALWAYS
ALWAYS表示不管字段值是什么(包括null),都会被包含在JSON响应中。
2. 局部配置(仅针对特定DTO生效)
如果只想让UserDTO的null字段显示出来,可以直接在DTO类上添加@JsonInclude注解:
@Data @JsonInclude(JsonInclude.Include.ALWAYS) public class UserDTO { private Long id; private String username; private String fullName; private String userRole; private String empNo; }
这样只有这个类的序列化会包含null字段,其他DTO不受影响。
验证
配置完成后,调用接口就能得到你预期的响应:
{ "id": 1, "username": "admin", "fullName": "Geeth Gamage", "userRole": "ADMIN", "empNo": null }
内容的提问来源于stack exchange,提问作者Geeth
相关产品推荐
相关产品推荐

