@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)

注:1.当实例对象中有Optional或AtomicReference类型的成员变量时,如果Optional或AtomicReference引用的实例为null,用NON_NULL 不能使该字段不做序列化,此时应使用NON_ABSENT规则
2.Optional是java用来优雅处理空指针的一个特性

3. NON_ABSENT

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

@JsonInclude(JsonInclude.Include.NON_ABSENT)

4. NON_EMPTY

NON_EMPTY排除字段值为null、空字符串、空集合、空数组、Optional类型引用为空,AtomicReference类型引用为空,例:

@JsonInclude(JsonInclude.Include.NON_EMPTY)

5. NON_DEFAULT

NON_DEFAULT没有更改的字段不序列化,即未变动的字段不返回,例:

@JsonInclude(JsonInclude.Include.NON_DEFAULT)

6. 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;
        }
    }

7. USE_DEFAULTS

注:注解增加在类名上时,对整个类生效;也可增加在字段上,此时只对该字段生效

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

@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
  • 16
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
@JsonInclude是一个Jackson库中的注解,用于控制在序列化Java对象为JSON时,哪些属性应该被包含或排除。它有四个选项: 1. @JsonInclude(JsonInclude.Include.ALWAYS):始终包含属性,即使属性的值为null或默认值。 2. @JsonInclude(JsonInclude.Include.NON_DEFAULT):默认选项,属性的值为默认值时不进行序列化。 3. @JsonInclude(JsonInclude.Include.NON_EMPTY):属性为空("")或为NULL时不进行序列化。 4. @JsonInclude(JsonInclude.Include.NON_NULL):属性为NULL时不进行序列化。 这些注解可以应用于类级别或属性级别。在类级别上使用@JsonInclude注解,可以控制整个类的序列化行为。在属性级别上使用@JsonInclude注解,可以针对特定属性进行控制。 例如,如果在用户实体类上使用@JsonInclude(JsonInclude.Include.NON_NULL),则在查询结果中,只有非空属性会被序列化并返回给前端。这样可以避免返回无用的属性。 请注意,@JsonInclude注解只对序列化有效,对反序列化没有影响。 #### 引用[.reference_title] - *1* [@JsonInclude](https://blog.csdn.net/Mr_Dracy/article/details/117950385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [@JsonInclude注解](https://blog.csdn.net/qq_44760975/article/details/125088984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java 注解@JsonInclude()的使用](https://blog.csdn.net/javaeEEse/article/details/122620359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定不饿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值