基於jackson動態序列化指定字段

2021-10-09 17:40:39 字數 1507 閱讀 5007

把物件序列化為json字串輸出的庫很多,本文我們來看如何基於jackson動態控制哪些屬性需要進行序列化。

對應使用jackson,需要我們在pom檔案中引入下面依賴:

com.fasterxml.jackson.core

jackson-databind

2.11.1

首先簡單看下如何使用:

@data

static class car

@data

static class house

@data

static class person

public static person makeperson()

public static void main(string arg) throws jsonprocessingexception

,

"house":,

"weight":150,

"id":8888,

"name":"加多"

}

如上person中所有屬性,包含其中car中所有屬性,house的所屬性都輸出了。

如果我們不想序列化某個屬性,比如不想序列化person中的car中的price屬性,則我們只需要在car類屬性上加註解:@jsonignore

@data

static class car

同理如果不想要序列化person中的car屬性,在其上新增@jsonignore註解即可。

對應上面情況,我們只能靜態的使用@jsonignore註解來過濾不需要序列化的屬性,那麼有沒有辦法在執行時進行動態過濾不需要過濾的屬性那?其實註解@jsonfilter,就可以做這個事件。

@jsonfilter("car")

static class car

@jsonfilter("house")

static class house

@jsonfilter("person")

static class person

如上首先在所有類上加上對應的註解,然後通過下面**新增過濾器:

public static void main(string arg) throws jsonprocessingexception
,

"house":,

"name":"加多"

}

可知序列化時,只序列化了我們指定的字段。上面**只是乙個例項,在執行時,我們可以根據需要動態設定過濾器,來起到動態序列化指定欄位的功能。

本文我們談論了如何使用@jsonfilter進行動態指定需要序列化欄位的功能。需要注意的是一旦乙個類上加了@jsonfilter註解,如果沒有指定過濾器,則執行時會報錯,那麼如何讓乙個類即可以支援動態過濾,又在沒指定過濾器的情況下正常執行那?其實很簡單,我們可以自定義註解並註冊…

如何基於jackson動態序列化指定字段

把物件序列化為json字串輸出的庫很多,本文我們來看如何基於jackson動態控制哪些屬性需要進行序列化。對應使用jackson,需要我們在pom檔案中引入下面依賴 com.fasterxml.jackson.core jackson databind 2.11.1 首先簡單看下如何使用 data ...

jackson反序列化物件

jackson解析json字串是區分大小寫的,如果對應的字段首字母為大寫或者不好設定對應的型別,寫出的get方法是獲取不到json值的,那麼這時候就需要新增 jsonproperty name 註解來標註反序列化的是哪個字段。如果反序列化的物件中包含物件或者集合,比如說map,list等,這時候就需...

jackson 列舉 序列化和反序列

網上這類資料很少,自己總結一下 data allargsconstructor public static enum eventjackson的列舉序列化 預設序列化為enum的name event.get password序列化為 get password 反序列化也一樣,只有string為 ge...