首页 > 其他分享 >@JsonInclude注解

@JsonInclude注解

时间:2023-02-15 16:45:42浏览次数:33  
标签:NON 序列化 null 注解 Include 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)

标签:NON,序列化,null,注解,Include,JsonInclude
From: https://www.cnblogs.com/ccx-lly/p/17123550.html

相关文章

  • ignite系列之6-- 使用注解配置索引
    官方连接:见处理SQL-3.2.使用注解配置索引https://www.ignite-service.cn/doc/java/WorkingwithSQL.html#_3-2-%E4%BD%BF%E7%94%A8%E6%B3%A8%E8%A7%A3%E9%85%8D%E7%BD%AE%E......
  • 异步注解@Async使用记录
    使用场景:需要执行某个方法但不需等待该方法的执行结果或者需要执行多个方法但这些方法不需要先后执行,可以通过声明并调用异步方法实现.因为每执行一个异步方法都需要从线......
  • SpringBoot常用注解大全
    常用注解概览这里整理了一张SpringBoot常用注解的思维导图,本文主要讲解这些注解的用法。 组件相关注解@ComponentScan默认扫描当前包及其子包下面被@component,@Cont......
  • spring-注解开发
    一.注解实现自动装配jdk1.5开始支持注解,spring2.5开始支持注解!要使用注解须知:1.导入约束xmlns:context="http://www.springframework.org/schema/context"http://......
  • 注解和反射
    注解和反射1、注解(Annotation)作用:​ 不是程序本身,可以对程序作出解释​ 可以被其他程序(编译器)读取格式:​ 注解是以“@注释名”在代码中存在的,还可以添加一些参数值......
  • @Bean注解和@Resource注解的用法作用
    今天学习Hikari资源池,想对资源池的一些参数进行监听时,不知道使用什么方法,然后查阅资料得知通过创建配置类,在配置类里对HikariDataSource进行初始化,通过@Bean创建bean交给sp......
  • SpringBoot注解大全
    一、项目配置注解@SpringBootApplication:申明让springboot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和@ComponentScan 三个......
  • 【学习笔记】Spring注解开发
    Spring注解开发使用注解开发首先要导入context约束,然后开启注解支持<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/bea......
  • Annotation - 元注解
     元注解包含@Target,@Retention,@Documented,@Inherited 具体的含义是:@Target表示该注解用于什么地方,可能的ElemenetType参数包括:*ElemenetType.CONST......
  • @Valid 和 @Validated 注解用法详解
    案例引入下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出@Valid和@Validated注解用法详解。那么,首先,我们会有一个员工对象Employee,如下:1/**2......