1. 前言在Java开发中有时候某些敏感信息我们需要屏蔽掉,不能被消费这些数据的客户端知道。通常情况下我们会将其设置为 2. Jackson如何忽略字段这里都以JSON序列化为例。假如我们在业务中需要返回用户信息,已有的POJO是这样的: import lombok.Data; /** * @author felord.cn */ @Data public class UserInfo { /** * userid */ private String userId; /** * 用户名 */ private String username; /** * 密钥串 */ private String secret; /** * 地址信息 */ private String address; } 业务场景:第三方通过用户的 使用@JsonIgnore注解Jackson提供了一个 @JsonIgnore private String secret; // 对应json 样例 {"userId":"100000","username":"felord.cn","address":"cn"} 无论是序列化(将POJO转为JSON)还是反序列化((将JSON转为POJO), 使用@JsonIgnoreProperties注解这个注解比
例如我们要忽略 @JsonIgnoreProperties({"secret", "address"}) 使用@JsonProperty注解
这个注解出镜率还是非常高的,通常为了给JSON的字段起别名或者设置默认值使用。比如 @JsonProperty(value = "user_id") private String userId; 在2.6版本以后,这个注解也能实现忽略字段的作用。它有个 public enum Access { /** * 无论是序列化还是反序列化都会根据配置自动的处理,默认值。 */ AUTO, /** * 意味着该属性只能在进行序列化时读取(通过“ getter”方法访问的值,或者从字段中读取),而在反序列化 * 期间不能写入(设置)。换句话说,这将反映“只读POJO”,其中包含的值可以读取但不能写入。 */ READ_ONLY, /** * 意味着该属性只能作为反序列化的一部分写入(设置)(使用“ setter”方法,或分配给Field,或作为 * Creator参数传递),而不会被读取(获取)以进行序列化,即,该属性的值不包括在序列化中。 */ WRITE_ONLY, /** * 可读可写,READ_ONLY与WRITE_ONLY的合并效果。 */ READ_WRITE; } 从这个注解中我们可以知道,如果你想在POJO转JSON时忽略 @JsonProperty( access = JsonProperty.Access.WRITE_ONLY) private String secret; 使用@JsonIgnoreType注解这个注解是用来直接忽略类型的,如果上面的 @JsonIgnoreType public class UserInfo { // 省略 } 3. 总结目前大概可知的Jackson有这么四种的忽略属性的方式,它们有各自的使用场景,你可以根据自己的情况选择使用。 |
|