中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么再Java Pojo轉Jsoy時忽略掉一些屬性

發布時間:2021-10-19 15:42:36 來源:億速云 閱讀:134 作者:iii 欄目:編程語言

本篇內容介紹了“怎么再Java Pojo轉Jsoy時忽略掉一些屬性”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

 1.  前言

在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;

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

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

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

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

使用@JsonIgnoreType 注解

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

@JsonIgnoreType public class UserInfo {    // 省略 }

“怎么再Java Pojo轉Jsoy時忽略掉一些屬性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

咸阳市| 民权县| 景东| 仁怀市| 嘉祥县| 兰西县| 定州市| 开江县| 霍州市| 九江县| 互助| 靖宇县| 贵州省| 缙云县| 确山县| 岚皋县| 望都县| 虹口区| 随州市| 汉寿县| 城口县| 大邑县| 鹿邑县| 沅陵县| 镇平县| 琼结县| 蓬溪县| 铅山县| 镇赉县| 阳信县| 昌黎县| 迭部县| 黔江区| 晋中市| 贵定县| 双鸭山市| 达拉特旗| 旬邑县| 开原市| 仲巴县| 北辰区|