1. 程式人生 > >json 常用註解

json 常用註解

1、@JsonAutoDetect

自動檢測,(作用在類上)來開啟/禁止自動檢測。

fieldVisibility:欄位的可見級別   

ANY:任何級別的欄位都可以自動識別  

NONE:所有欄位都不可以自動識別   

NON_PRIVATE:非private修飾的欄位可以自動識別  

PROTECTED_AND_PUBLIC:被protected和public修飾的欄位可以被自動識別   

PUBLIC_ONLY:只有被public修飾的欄位才可以被自動識別     

DEFAULT:

 

jackson預設的欄位屬性發現規則如下:

所有被public修飾的欄位->所有被public修飾的getter->所有被public修飾的setter)

2、@JsonIgnore

作用在欄位或方法上,用來完全忽略被註解的欄位和方法對應的屬性.

 

3、@JsonProperty

作用在欄位或方法上,用來對屬性的序列化/反序列化,可以用來避免遺漏屬性,同時提供對屬性名稱重新命名

4、@JsonIgnoreProperties

作用在類上,用來說明有些屬性在序列化/反序列化時需要忽略掉,可以將它看做是@JsonIgnore的批量操作,但它的功能比@JsonIgnore要強,比如一個類是代理類,我們無法將將@JsonIgnore標記在屬性或方法上,此時便可用@JsonIgnoreProperties標註在類宣告上,它還有一個重要的功能是作用在反序列化時解析欄位時過濾一些未知的屬性,否則通常情況下解析到我們定義的類不認識的屬性便會丟擲異常。

可以註明是想要忽略的屬性列表如@JsonIgnoreProperties({"name","age","title"}),

也可以註明過濾掉未知的屬性如@JsonIgnoreProperties(ignoreUnknown=true)

5、@JsonUnwrapped

作用在屬性欄位或方法上,用來將子JSON物件的屬性新增到封閉的JSON物件。

 

6、@JsonIdentityInfo

2.0+版本新註解,作用於類或屬性上,被用來在序列化/反序列化時為該物件或欄位新增一個物件識別碼,通常是用來解決迴圈巢狀的問題

 

 

 

7、@JsonNaming

 

jackson 2.1+版本的註解,作用於類或方法,注意這個註解是在jackson-databind包中而不是在jackson-annotations包裡,它可以讓你定製屬性命名策略,作用和前面提到的@JsonProperty的重新命名屬性名稱相同。

 

8、@JsonTypeInfo

作用於類/介面,被用來開啟多型型別處理,對基類/介面和子類/實現類都有效

9、@JsonSubTypes

作用於類/介面,用來列出給定類的子類,只有當子類型別無法被檢測到時才會使用它,一般是配合@JsonTypeInfo在基類上使用

10、@JsonTypeName

作用於子類,用來為多型子類指定型別識別符號的值

11、@JsonTypeResolver@JsonTypeIdResoler

 

作用於類,可以自定義多型的型別識別符號,這個平時很少用到,主要是現有的一般就已經滿足絕大多數的需求了,如果你需要比較特別的型別識別符號,建議使用這2個註解,自己定製基於TypeResolverBuilder和TypeIdResolver的類即可

12、@JsonSerialize@JsonDeserialize

作用於方法和欄位上,通過 using(JsonSerializer)和using(JsonDeserializer)來指定序列化和反序列化的實現,通常我們在需要自定義序列化和反序列化時會用到,比如下面的例子中的日期轉換

13、@JsonPropertyOrder

作用在類上,被用來指明當序列化時需要對屬性做排序,它有2個屬性

 

一個是alphabetic:布林型別,表示是否採用字母拼音順序排序,預設是為false,即不排序

14、JsonView

檢視模板,作用於方法和屬性上,用來指定哪些屬性可以被包含在JSON檢視中

15、@JsonFilter

Json屬性過濾器,作用於類,作用同上面的@JsonView,都是過濾掉不想要的屬性,輸出自己想要的屬性。和@FilterView不同的是@JsonFilter可以動態的過濾屬性,比如我不想輸出以system開頭的所有屬性

16、@JsonIgnoreType

作用於類,表示被註解該型別的屬性將不會被序列化和反序列化

17、@JsonAnySetter

作用於方法,在反序列化時用來處理遇到未知的屬性的時候呼叫,在本文前面我們知道可以通過註解@JsonIgnoreProperties(ignoreUnknown=true)來過濾未知的屬性,但是如果需要這些未知的屬性

18、@JsonCreator

 

作用於方法,通常用來標註構造方法或靜態工廠方法上,使用該方法來構建例項,預設的是使用無參的構造方法,通常是和@JsonProperty或@JacksonInject配合使用

19、@JacksonInject

作用於屬性、方法、構造引數上,被用來反序列化時標記已經被注入的屬性

20、@JsonPOJOBuilder

 

作用於類,用來標註如何定製構建物件,使用的是builder模式來構建,比如Value v = new ValueBuilder().withX(3).withY(4).build();這種就是builder模式來構建物件,通常會喝@JsonDeserialize.builder來配合使用。