一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java開發(fā)中POJO和JSON互轉時如何忽略隱藏字段的問題

Java開發(fā)中POJO和JSON互轉時如何忽略隱藏字段的問題

2021-08-03 10:43碼農(nóng)小胖哥 Java教程

這篇文章主要介紹了Java開發(fā)中POJO和JSON互轉時如何忽略隱藏字段的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Java開發(fā)中POJO和JSON互轉時如何忽略隱藏字段的問題

1. 前言

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

2. jackson如何忽略字段

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

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

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

使用@jsonignore注解

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

?
1
2
3
@jsonignore
private string secret;
// 對應json 樣例 {"userid":"100000","username":"felord.cn","address":"cn"}

無論是序列化(將pojo轉為json)還是反序列化((將json轉為pojo),secret都會被忽略。

使用@jsonignoreproperties注解

這個注解比@jsonignore更加強大一些,通常該注解標記到pojo之上,它有更多的能力:

  • 忽略多個字段,配置value屬性即可。
  • 忽略未知的屬性,配置ignoreunknowntrue,默認不忽略。
  • 允許忽略字段被序列化,配置allowgetterstrue,序列化的時候不會被忽略。
  • 允許忽略字段被反序列化,配置allowsetterstrue,反序列化的時候不會被忽略。

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

?
1
@jsonignoreproperties({"secret", "address"})

使用@jsonproperty注解

需要jackson版本不低于2.6

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

?
1
2
@jsonproperty(value = "user_id")
private string userid;

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

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

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

?
1
2
@jsonproperty( access = jsonproperty.access.write_only)
private string secret;

使用@jsonignoretype注解

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

?
1
2
3
4
@jsonignoretype
public class userinfo {
  // 省略
}

3. 總結

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

到此這篇關于java開發(fā)中pojo和json互轉時如何忽略隱藏字段的問題的文章就介紹到這了,更多相關java中pojo和json互轉內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美性一区二区三区 | 娇妻在床上迎合男人 | 羞羞一区二区三区四区片 | 91精品国产亚一区二区三区 | 亚洲欧美日韩国产精品一区 | 欧美亚洲国产一区二区三区 | 国产原创一区二区 | 国产成人在线视频播放 | 饭冈加奈子黑人解禁在线播放 | 国产网站免费在线观看 | 国产清纯白嫩大学生正在播放 | а天堂中文最新版在线官网视频 | 能播放的欧美同性videos | 白丝爆动漫羞羞动漫网站 | 日本高清va不卡视频在线观看 | 丰满肥臀风间由美357在线 | 啾咪成人漫画免费 | 日韩欧美在线视频一区二区 | 亚洲欧美成人综合久久久 | 国产精品网页 | 亚洲国产一区二区三区青草影视 | 55夜色66夜亚州精品站 | 九九免费精品视频 | www.麻豆视频| 国产精品酒店视频免费看 | 九九大香尹人视频免费 | 日本免费在线观看视频 | 超级乱淫 不详 | 香蕉国产精品偷在线播放 | 毛片免费观看 | 亚洲免费视频一区二区三区 | 精精国产xxxx视频在线播放器 | sxx免费看观看美女 sss亚洲国产欧美一区二区 | 99视频在线看观免费 | 91久久国产成人免费观看资源 | 网站在线观看 | 国产chinese男同gay | 亚洲精品第二页 | 免费网址在线观看入口推荐 | 天天做天天爱天天操 | 国产精品第3页 |