成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何再Java Pojo轉Jsoy時忽略掉一些屬性

開發 后端
在Java開發中有時候某些敏感信息我們需要屏蔽掉,不能被消費這些數據的客戶端知道。

[[379614]]

 1. 前言

在Java開發中有時候某些敏感信息我們需要屏蔽掉,不能被消費這些數據的客戶端知道。通常情況下我們會將其設置為null或者空字符"",其實還有其它辦法,如果你使用了Jackson的話。接下來我將以一個實際場景來告訴你可以怎么做。

2. Jackson 如何忽略字段

這里都以 JSON 序列化為例。假如我們在業務中需要返回用戶信息,已有的 POJO 是這樣的:

  1. import lombok.Data; 
  2.  
  3. /** 
  4.  * @author felord.cn 
  5.  */ 
  6. @Data 
  7. public class UserInfo { 
  8.     /** 
  9.      * userid 
  10.      */ 
  11.     private String userId; 
  12.     /** 
  13.      * 用戶名 
  14.      */ 
  15.     private String username; 
  16.     /** 
  17.      * 密鑰串 
  18.      */ 
  19.     private String secret; 
  20.     /** 
  21.      * 地址信息 
  22.      */ 
  23.     private String address; 

業務場景:第三方通過用戶的userId來獲取用戶的信息,但是密鑰串secret顯然不能讓第三方知道,通常最容易想到的方法是將secret字段設置為null或者""。如果業務需要批量提供用戶信息,即List,我們總不能每次都要遍歷一遍吧。Spring Boot內置的Jackson可以很方便的幫我們處理這個問題。

使用@JsonIgnore 注解

Jackson提供了一個@JsonIgnore注解,將它標記到需要被忽略的字段上或者對應的getter方法或者setter方法上就可以實現對該字段的屏蔽。就像下面這樣標記:

  1. @JsonIgnore 
  2.  private String secret; 
  3. // 對應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,我們可以這樣配置:

  1. @JsonIgnoreProperties({"secret""address"}) 

使用@JsonProperty 注解

需要 Jackson 版本不低于 2.6

這個注解出鏡率還是非常高的,通常為了給JSON的字段起別名或者設置默認值使用。比如UserInfo中的userId想對應JSON中的user_id,我們可以:

  1. @JsonProperty(value = "user_id"
  2. private String userId; 

在 2.6 版本以后,這個注解也能實現忽略字段的作用。它有個access屬性,用來指定在序列化(“讀取”)和反序列化(“寫”)期間訪問權限(這里的讀寫是以屬性為視角)。它由枚舉Access定義:

  1. public enum Access 
  2.     /** 
  3.      * 無論是序列化還是反序列化都會根據配置自動的處理,默認值。 
  4.      */ 
  5.     AUTO, 
  6.  
  7.     /** 
  8.      * 意味著該屬性只能在進行序列化時讀取(通過“ getter”方法訪問的值,或者從字段中讀取),而在反序列化      * 期間不能寫入(設置)。換句話說,這將反映“只讀POJO”,其中包含的值可以讀取但不能寫入。 
  9.      */ 
  10.     READ_ONLY, 
  11.  
  12.     /** 
  13.      * 意味著該屬性只能作為反序列化的一部分寫入(設置)(使用“ setter”方法,或分配給Field,或作為          * Creator參數傳遞),而不會被讀取(獲取)以進行序列化,即,該屬性的值不包括在序列化中。 
  14.      */ 
  15.     WRITE_ONLY, 
  16.  
  17.     /** 
  18.      * 可讀可寫,READ_ONLY與WRITE_ONLY的合并效果。 
  19.      */ 
  20.     READ_WRITE; 

從這個注解中我們可以知道,如果你想在POJO轉JSON時忽略secret字段,就可以這么寫:

  1. @JsonProperty( access = JsonProperty.Access.WRITE_ONLY) 
  2. private String secret; 

使用@JsonIgnoreType 注解

這個注解是用來直接忽略類型的,如果上面的UserInfo是另外一個 POJO 的屬性,我們不希望它被序列化和反序列化,那么就可以:

  1. @JsonIgnoreType 
  2. public class UserInfo { 
  3.    // 省略 

3. 總結

目前大概可知的 Jackson 有這么四種的忽略屬性的方式,它們有各自的使用場景,你可以根據自己的情況選擇使用。好了今天的分享就到這里,多多關注:碼農小胖哥,獲取更多的編程干貨。

本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2023-10-25 13:37:04

Git

2009-06-22 15:36:00

如何學好java

2022-03-02 08:01:31

面試前端開發

2011-06-01 16:50:21

JAVA

2012-09-25 10:03:56

JavaJava封面Java開發

2011-06-02 10:04:53

CSS

2021-04-25 09:30:52

開發CSS 瀏覽器

2020-05-19 08:06:57

代碼重構代碼開發

2010-07-21 14:33:27

SQL Server

2009-06-18 09:51:25

Java繼承

2009-07-09 13:16:54

Java Swing開

2015-08-24 09:26:18

Java內存問題見解

2015-12-08 09:05:41

Java內部類

2009-06-04 09:14:32

struts學習struts常用屬性

2012-09-11 09:16:52

Hadoop

2024-10-10 08:51:15

2020-10-29 08:39:45

JSONJava對象

2021-06-18 07:35:46

Java接口應用

2011-03-11 09:27:11

Java性能監控

2016-12-07 09:38:53

SparkMapReduce
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文一区 | 国产精品毛片 | 一区二区三区国产精品 | 中国大陆高清aⅴ毛片 | 日韩三区| 国产三级大片 | 国产高清在线精品 | 中文字幕日韩欧美一区二区三区 | 99亚洲精品视频 | 国产清纯白嫩初高生视频在线观看 | 国产精品亚洲片在线播放 | 欧美成人一级 | www.玖玖玖| 亚洲av毛片成人精品 | 国产不卡视频 | 国产美女特级嫩嫩嫩bbb片 | 日本亚洲一区 | 9999在线视频 | 青青草视频免费观看 | 中文字幕日韩欧美一区二区三区 | 亚洲综合国产精品 | 色欧美综合 | 不卡av电影在线播放 | 青青久在线视频 | 亚洲欧美一区二区三区国产精品 | 日韩免费看视频 | 青青久草| 综合网伊人 | 国产ts人妖系列高潮 | 久久中文字幕一区 | 日韩精品视频一区二区三区 | 日韩www | 伊人精品视频 | 一区二区三区久久久 | 亚洲一区不卡 | 天天操操| 精品综合| 久久精品久久久久久 | 成人深夜福利 | 久久精品国产一区 | 中文字幕免费 |