jackSon中@JsonInclude注解详解

jackSon中@JsonInclude注解详解

前言

比如说我有个场景,返回前端的实体类中如果某个字段为空的话那么就不返回这个字段了,如果我们平时遇到这个问题,那么真的该脑壳疼了。幸亏有我们今天的主角,这个注解就是用来在实体类序列化成json的时候在某些策略下,加了该注解的字段不去序列化该字段。

@JsonInclude用法

JsonJsonInclude.Include.ALWAYS 这个是默认策略,任何情况下都序列化该字段,和不写这个注解是一样的效果。
JsonJsonInclude.Include.NON_NULL这个最常用,即如果加该注解的字段为null,那么就不序列化这个字段了。
JsonJsonInclude.Include.NON_ABSENT这个包含NON_NULL,即为null的时候不序列化,第二种情况是下面的英文,我也没看懂,有兴趣的朋友可以研究下给我留言。
“absent” value of a referential type (like Java 8 Optional, or {link java.utl.concurrent.atomic.AtomicReference}); that is, something that would not deference to a non-null value.
This option is mostly used to work with "Optional"s (Java 8, Guava)
JsonJsonInclude.Include.NON_EMPTY 这个属性包含NON_NULL,NON_ABSENT之后还包含如果字段为空也不序列化。这个也比较常用
JsonJsonInclude.Include.NON_DEFAULT这个也好理解,如果字段是默认值的话就不序列化。
JsonJsonInclude.Include.CUSTOM奉上英文解释,我还没研究懂
Value that indicates that separate filter Object (specified by valueFilter for value itself, and/or contentFilter for contents of structured types) is to be used for determining inclusion criteria. Filter object’s equals() method is called with value to serialize; if it returns true value is excluded (that is, filtered out); if false value is included.
JsonJsonInclude.Include.USE_DEFAULTS同上暂时没研究懂
Pseudo-value used to indicate that the higher-level defaults make sense, to avoid overriding inclusion value. For example, if returned for a property this would use defaults for the class that contains property, if any defined; and if none defined for that, then global serialization inclusion details.
这里我们以如果为null则不序列化举例说明

public class User {
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String username;
    private String password;
    private Integer age;
    }

测试代码

    public static void main(String[] args) throws IOException {
        User user = new User();
        ObjectMapper objectMapper = new ObjectMapper();
        String value = objectMapper.writeValueAsString(user);
        System.out.println(value);
    }

结果

{"password":null,"age":null}

可以看出我们在username上面加了这儿注解并且指定为null的时候不序列化,结果里面没有序列化username这个属性。password和age字段没有加属性,正常序列化成功。

@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 ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值