@JsonInclude注解

@JsonInclude注解
是jackSon中最常用的注解之一,是为实体类在接口序列化返回值时增加规则的注解
例如,一个接口需要过滤掉返回值为null的字段,即值为null的字段不返回,可以在实体类中增加如下注解

@JsonInclude(JsonInclude.Include.NON_NULL)

@JsonInclude注解中的规则有:

  1. ALWAYS
    ALWAYS为默认值,表示全部序列化,即默认返回全部字段,例:
    @JsonInclude(JsonInclude.Include.ALWAYS)

  2. NON_NULL
    NON_NULL表示值为null就不序列化,即值为null的字段不返回,例:
    @JsonInclude(JsonInclude.Include.NON_NULL)

注:当实例对象中有Optional或AtomicReference类型的成员变量时,如果Optional或AtomicReference引用的实例为null,用NON_NULL 不能使该字段不做序列化,此时应使用NON_ABSENT规则

  1. NON_ABSENT
    NON_ABSENT可在实例对象中有Optional或AtomicReference类型的成员变量时,如果Optional或AtomicReference引用的实例为null时,也可使该字段不做序列化,同时可以排除值为null的字段,例:
    @JsonInclude(JsonInclude.Include.NON_ABSENT)

  2. NON_EMPTY
    NON_EMPTY排除字段值为null、空字符串、空集合、空数组、Optional类型引用为空,AtomicReference类型引用为空,例:
    @JsonInclude(JsonInclude.Include.NON_EMPTY)

  3. NON_DEFAULT
    NON_DEFAULT没有更改的字段不序列化,即未变动的字段不返回,例:
    @JsonInclude(JsonInclude.Include.NON_DEFAULT)

  4. CUSTOM
    相对其他类型,CUSTOM略为复杂,这个值要配合valueFilter属性一起使用,在序列化的时候会执行CustomFilter中的的equals方法,该方法的入参就是字段的值,如果equals方法返回true,字段就不会被序列化,如果equals方法返回false时字段才会被序列化,即true时不返回,false时才返回,例:

@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = CustomFilter.class)
private String field;
static class CustomFilter {
        @Override
        public boolean equals(Object obj) {
            // 为null,或者不是字符串就返回true,即不返回该字段
            if(null == obj || !(obj instanceof String)) {
                return true;
            }

            // 长度大于2就返回true,意味着不被序列化
            return ((String) obj).length() > 2;
        }
    }
  1. USE_DEFAULTS
    注:注解增加在类名上时,对整个类生效;也可增加在字段上,此时只对该字段生效

如果类注解和字段注解同时存在时,除注解值为USE_DEFAULTS时,均以成员变量注解为准;当值为USE_DEFAULTS的注解在字段上且与类注解同时存在时,以类注解为准,例:
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)

posted @   程长新  阅读(435)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示