后端返回给前端JSON格式的对象数据中,当对象的字段为NULL时,该字段也会写入JSON返回;而很多时候前端期望后端只返回对象中非null的字段数据。在Jackson框架中提供了 @JsonInclude 注解以实现该功能
不返回null字段数据
在相关对象的类或对应字段
上添加 @JsonInclude
注解,设定值为 NON_NULL
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Student
{
private int id;
private String username;
private String sex;
//字段上则只对这个字段生效
@JsonInclude(JsonInclude.Include.NON_NULL)
private String address;
...
}
则HTTP Response返回的该类的对象的JSON数据如下所示,无为null的字段
{
"id": 0,
"username": "Kallen",
"sex": "female"
}
返回null字段数据
在相关对象的类或对应字段
上添加 @JsonInclude
注解,设定值为 ALWAYS
@JsonInclude(JsonInclude.Include.ALWAYS)
则HTTP Response返回的该类的对象的JSON数据如下所示,其中包含null的字段
{
"id": 0,
"username": "Kallen",
"sex": "female",
"address": null
}
下面这些操作只有在接口返回的bean里的这个属性不是必需的时候才能这样玩,不然千万不要这样玩
在controller返回前端的时候单个实体类需要在属性值为null的时候忽略这个属性
加注解前,返回的属性的value是null
加注解后
这里data里的实体类是OrderDTO,所以在OrderDTO上加
@JsonInclude(JsonInclude.Include.NON_NULL)
注解即可
但是当有很多很多的实体类都需要这样时,如果允许全局都这样操作,可以在spring的启动yml文件中配置
spring:
jackson:
default-property-inclusion: non_null
也可以手动设置
demo
ObjectMapper objectMapper = new ObjectMapper()
//JsonInclude.Include.ALWAYS则是序列化的时候包含null值字段
objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL)