加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

怎样 在Java Pojo转Jsoy时忽略掉一些属性

发布时间:2022-12-06 12:36:57 所属栏目:语言 来源:
导读:  在Java开发中有时候某些敏感信息我们需要屏蔽掉,不能被消费这些数据的客户端知道。通常情况下我们会将其设置为null或者空字符"",其实还有其它办法,如果你使用了Jackson的话。接下来我将以一个实际场景来告诉

  在Java开发中有时候某些敏感信息我们需要屏蔽掉,不能被消费这些数据的客户端知道。通常情况下我们会将其设置为null或者空字符"",其实还有其它办法,如果你使用了Jackson的话。接下来我将以一个实际场景来告诉你可以怎么做。
 
  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;
 
  }
 
  业务场景:第三方通过用户的userId来获取用户的信息,但是密钥串secret显然不能让第三方知道,通常最容易想到的方法是将secret字段设置为null或者""。如果业务需要批量提供用户信息,即List,我们总不能每次都要遍历一遍吧。Spring Boot内置的Jackson可以很方便的帮我们处理这个问题。
 
  使用@JsonIgnore 注解
 
  Jackson提供了一个@JsonIgnore注解,将它标记到需要被忽略的字段上或者对应的getter方法或者setter方法上就可以实现对该字段的屏蔽。就像下面这样标记:
 
  @JsonIgnore
 
   private String secret;
 
  // 对应json 样例  {"userId":"100000","username":"felord.cn","address":"cn"}
 
  无论是序列化(将POJO转为JSON)还是反序列化((将JSON转为POJO),secret都会被忽略。
 
  使用@JsonIgnoreProperties 注解
 
  这个注解比@JsonIgnore更加强大一些,通常该注解标记到POJO之上,它有更多的能力:
 
  忽略多个字段,配置value属性即可。
 
  忽略未知的属性,配置ignoreUnknown为true,默认不忽略。
 
  允许忽略字段被序列化,配置allowGetters为true,序列化的时候不会被忽略。
 
  允许忽略字段被反序列化,配置allowSetters为true,反序列化的时候不会被忽略。
 
  例如我们要忽略UserInfo中的secret和address,我们可以这样配置:
 
  @JsonIgnoreProperties({"secret", "address"})
 
  使用@JsonProperty 注解
 
  需要 Jackson 版本不低于 2.6
 
  这个注解出镜率还是非常高的,通常为了给JSON的字段起别名或者设置默认值使用。比如UserInfo中的userId想对应JSON中的user_id,我们可以:
 
  @JsonProperty(value = "user_id")
 
  private String userId;
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!