欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java開(kāi)發(fā)中POJO和JSON互轉(zhuǎn)時(shí)如何忽略隱藏字段的問(wèn)題

 更新時(shí)間:2021年02月03日 15:19:00   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了Java開(kāi)發(fā)中POJO和JSON互轉(zhuǎn)時(shí)如何忽略隱藏字段的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1. 前言

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

2. Jackson如何忽略字段

這里都以JSON序列化為例。假如我們?cè)跇I(yè)務(wù)中需要返回用戶信息,已有的POJO是這樣的:

import lombok.Data;

/**
 * @author felord.cn
 */
@Data
public class UserInfo {
  /**
   * userid
   */
  private String userId;
  /**
   * 用戶名
   */
  private String username;
  /**
   * 密鑰串
   */
  private String secret;
  /**
   * 地址信息
   */
  private String address;
}

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

使用@JsonIgnore注解

Jackson提供了一個(gè)@JsonIgnore注解,將它標(biāo)記到需要被忽略的字段上或者對(duì)應(yīng)的getter方法或者setter方法上就可以實(shí)現(xiàn)對(duì)該字段的屏蔽。就像下面這樣標(biāo)記:

  @JsonIgnore
  private String secret;
  // 對(duì)應(yīng)json 樣例 {"userId":"100000","username":"felord.cn","address":"cn"}

無(wú)論是序列化(將POJO轉(zhuǎn)為JSON)還是反序列化((將JSON轉(zhuǎn)為POJO),secret都會(huì)被忽略。

使用@JsonIgnoreProperties注解

這個(gè)注解比@JsonIgnore更加強(qiáng)大一些,通常該注解標(biāo)記到POJO之上,它有更多的能力:

  • 忽略多個(gè)字段,配置value屬性即可。
  • 忽略未知的屬性,配置ignoreUnknowntrue,默認(rèn)不忽略。
  • 允許忽略字段被序列化,配置allowGetterstrue,序列化的時(shí)候不會(huì)被忽略。
  • 允許忽略字段被反序列化,配置allowSetterstrue,反序列化的時(shí)候不會(huì)被忽略。

例如我們要忽略UserInfo中的secretaddress,我們可以這樣配置:

@JsonIgnoreProperties({"secret", "address"})

使用@JsonProperty注解

需要Jackson版本不低于2.6

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

@JsonProperty(value = "user_id")
private String userId;

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

public enum Access
{
  /**
   * 無(wú)論是序列化還是反序列化都會(huì)根據(jù)配置自動(dòng)的處理,默認(rèn)值。
   */
  AUTO,

  /**
   * 意味著該屬性只能在進(jìn)行序列化時(shí)讀?。ㄍㄟ^(guò)“ getter”方法訪問(wèn)的值,或者從字段中讀?。?,而在反序列化   * 期間不能寫(xiě)入(設(shè)置)。換句話說(shuō),這將反映“只讀POJO”,其中包含的值可以讀取但不能寫(xiě)入。
   */
  READ_ONLY,

  /**
   * 意味著該屬性只能作為反序列化的一部分寫(xiě)入(設(shè)置)(使用“ setter”方法,或分配給Field,或作為     * Creator參數(shù)傳遞),而不會(huì)被讀?。ǐ@取)以進(jìn)行序列化,即,該屬性的值不包括在序列化中。
   */
  WRITE_ONLY,

  /**
   * 可讀可寫(xiě),READ_ONLY與WRITE_ONLY的合并效果。
   */
  READ_WRITE;
}

從這個(gè)注解中我們可以知道,如果你想在POJO轉(zhuǎn)JSON時(shí)忽略secret字段,就可以這么寫(xiě):

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

使用@JsonIgnoreType注解

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

@JsonIgnoreType
public class UserInfo {
  // 省略
}

3. 總結(jié)

目前大概可知的Jackson有這么四種的忽略屬性的方式,它們有各自的使用場(chǎng)景,你可以根據(jù)自己的情況選擇使用。

到此這篇關(guān)于Java開(kāi)發(fā)中POJO和JSON互轉(zhuǎn)時(shí)如何忽略隱藏字段的問(wèn)題的文章就介紹到這了,更多相關(guān)Java中POJO和JSON互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot Hello World的實(shí)現(xiàn)代碼

    Spring Boot Hello World的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Spring Boot Hello World的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解SpringBoot之訪問(wèn)靜態(tài)資源(webapp...)

    詳解SpringBoot之訪問(wèn)靜態(tài)資源(webapp...)

    這篇文章主要介紹了詳解SpringBoot之訪問(wèn)靜態(tài)資源(webapp...),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java等待喚醒機(jī)制原理實(shí)例解析

    Java等待喚醒機(jī)制原理實(shí)例解析

    這篇文章主要介紹了Java等待喚醒機(jī)制原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 圖解Java排序算法之3種簡(jiǎn)單排序

    圖解Java排序算法之3種簡(jiǎn)單排序

    這篇文章主要為大家詳細(xì)介紹了Java排序算法之3種簡(jiǎn)單排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java簡(jiǎn)單實(shí)現(xiàn)session保存到redis的方法示例

    Java簡(jiǎn)單實(shí)現(xiàn)session保存到redis的方法示例

    這篇文章主要介紹了Java簡(jiǎn)單實(shí)現(xiàn)session保存到redis的方法,結(jié)合實(shí)例形式分析了Java將session存入redis緩存服務(wù)器的相關(guān)設(shè)置、實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2018-05-05
  • SpringBoot整合Shiro的方法詳解

    SpringBoot整合Shiro的方法詳解

    Apache?Shiro是一個(gè)java安全(權(quán)限)框架,Shiro可以非常容易的開(kāi)發(fā)出足夠好的應(yīng)用,其不僅可以用在javase環(huán)境,也可以用在javaee環(huán)境。本文介紹了SpringBoot整合Shiro的方法,需要的可以參考一下
    2022-05-05
  • 阿里云OSS基于java使用詳解

    阿里云OSS基于java使用詳解

    這篇文章主要介紹了阿里云OSS基于java使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問(wèn)題

    SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問(wèn)題

    這篇文章主要介紹了SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • MyBatis分頁(yè)查詢返回list的時(shí)候出現(xiàn)null的問(wèn)題

    MyBatis分頁(yè)查詢返回list的時(shí)候出現(xiàn)null的問(wèn)題

    這篇文章主要介紹了MyBatis分頁(yè)查詢返回list的時(shí)候出現(xiàn)null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java基礎(chǔ)學(xué)習(xí)之方法的重載知識(shí)總結(jié)

    Java基礎(chǔ)學(xué)習(xí)之方法的重載知識(shí)總結(jié)

    今天帶大家來(lái)回顧Java基礎(chǔ)知識(shí),文中對(duì)Java方法的重載相關(guān)知識(shí)作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論