Jackson 忽略字段(对字段进行序列化和反序列化)
在使用 Jackson 进行序列化和反序列化时,有时候需要对某些字段进行过滤,以便在 JSON 数据中不包含某些敏感信息
@JsonInclude
可以标记在字段上
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonIgnore {
boolean value() default true;
}
例如,以下代码示例使用 @JsonIgnore
注解来隐藏敏感的密码字段:
@Data
public class User {
private Integer id;
private String username;
@JsonIgnore // 隐藏了password字段
private String password;
}
@JsonIgnoreProperties
可以标记在类上
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonIgnoreProperties {
String[] value() default {};
}
@Data
@JsonIgnoreProperties({"username","password"})
public class User {
private Integer id;
private String username;
private String password;
}
@JsonIgnoreType
// 被该注解修饰的类,
// 作为其他类的成员变量时,不论是序列化还是反序列化都被忽略了;
@JsonIgnoreType
@JsonIgnoreType
public class TestChild {
private int value;
}
// Test类进行序列化和反序列时,
// 字段child被忽略
public class Test {
private String name;
private TestChild child;
}
JsonAutoDetect
// 根据访问权限修饰符,对字段是否进行序列化和反序列化
@JsonAutoDetect
// 只对访问权限修饰符为public的字段进行序列化和反序列化
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
public class College {
private String name;
private String city;
protected int age;
}
// fieldVisibility属性有以下值可选
ANY // 所有
NON_PRIVATE // private之外的
PROTECTED_AND_PUBLIC // protected和public的(此时privte和默认的package access时不能被自动识别的)
PUBLIC_ONLY // public的
NONE // 禁止自动识别
DEFAULT // 默认的,用于继承父类的自动识别的范围
参考链接
https://blog.csdn.net/weixin_45427648/article/details/129645380