顺便看看@JsonInclude的常用策略:
JsonInclude.Include.ALWAYS 默认策略,无论如何都会序列化该字段,写不写效果都一样;
JsonInclude.Include.NON_NULL 最常用,如果该字段为null,就不序列化;
JsonInclude.Include.NON_ABSENT 没用过,不清楚。
JsonInclude.Include.NON_EMPTY 这个属性包含NON_NULL,NON_ABSENT之后还包含如果字段为空也不序列化。
JsonInclude.Include.NON_DEFAULT 这个属性是如果该字段为默认值的话就不序列化。
JsonInclude.Include.USE_DEFAULTS 如果有默认值的话就不序列化。
JsonInclude.Include.CUSTOM 这个就是自定义校验规则,下面详细讲:
如何使用:
value = JsonInclude.Include.CUSTOM
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = UsernameFilter.class) private String username;
自定义一个UsernameFilter类:
重写它的equals方法,在里面做你的校验逻辑,如果返回true,就不序列化 username 字段;