Spring Boot项目配置接口返回实体字段为Null不显示
2020-03-27 本文已影响0人
zhangweisep
首先我们先来看一下对比效果
未配置Null值不显示:
{
"success": true,
"code": "1000",
"error": "执行成功",
"data": [
{
"id": "58f9dfe411884b928830717ee06c",
"createBy": null,
"createTime": null,
"updateBy": null,
"updateTime": null,
"delFlag": null,
"remark": null,
"pretensionId": null,
"holeNum": "测试数据",
"elongationTheory": null,
"elongationReal": null,
"elongationError": null,
"status": null
}
]
}
配置了不显示Null值之后:
{
"success": true,
"code": "1000",
"error": "执行成功",
"data": [
{
"id": "58f9dfe411884b928830717ee06c",
"holeNum": "测试数据"
}
]
}
要想实现这种效果有三种方式
(个人总结,如有不对还望指正,如有其它方式还请留言,万分感谢)
- 在yml文件中配置null值验证
- 配置JacksonConfig 类配置null值验证
- 使用注解的方式配置null值验证
网上关于1、2两种null值验证方式的资料很多,这里偷懒就不写了,请自行查阅
这边简单说一下使用注解的方式配置null值验证
注解验证也有两种方式
- 使用@JsonSerialize注解
- 使用@JsonInclude注解
@JsonSerialize是早期使用的注解,目前已经过时了
com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion已经被 com.fasterxml.jackson.annotation.JsonInclude代替。
所以@JsonSerialize已经被弃用了
目前使用的是@JsonInclude注解
@JsonInclude(JsonInclude.Include.NON_NULL)
Include有七个枚举值
ALWAYS,//该值指示始终包含该属性
NON_NULL,//属性为NULL 不序列化,就是为null的字段不参加序列化
NON_ABSENT,// 属性为默认值不序列化
NON_EMPTY,//属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
NON_DEFAULT,
CUSTOM,//该值指示单独的“筛选器”对象
USE_DEFAULTS;//伪值,用于指示更高级别的默认值
一般会用到NON_NULL和NON_EMPTY
这个注解可以使用在类和字段上,来达到精准控制字段值的规则