日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jackson注解学习参考

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jackson注解学习参考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容摘錄、翻譯自https://github.com/FasterXML/jackson-annotations?
(1)初級?
我們從幾個簡單的使用場景開始:重命名屬性,忽略屬性,以及修改屬性所使用的類型。?
注意:下面的例子僅僅顯示了成員屬性(field properties),注解同樣也可以用在成員方法(getter/setter)上。?
①屬性重命名時使用的注解?
最常見的使用方式之一就是改變某個成員屬性所使用的JSON名稱,例如:?

public class Name {?
? @JsonProperty("firstName")?
? public String _first_name;?
}?

將會生成如下所示的JSON數據結果:?
{ "firstName" : "Bob" }?

而不是:?
{ "_first_name" : "Bob"}?

②忽略屬性時使用的注解?
有時POJO包括了一些你不希望輸出的屬性,在這種情況下,你可以進行如下操作:?
public class Value {?
? public int value;?
? @JsonIgnore public int internalValue;?
}?

這時得到的JSON數據結果如下:?
{ "value" : 42 }?

或者,你可能忽略掉某些從JSON數據中得到的屬性,如果是這樣,你可以使用:?
@JsonIgnoreProperties({ "extra", "uselessValue" })?
public class Value {?
? public int value;?
}?

這樣就能夠處理像如下所示的JSON數據:?
{ "value" : 42, "extra" : "fluffy", "uselessValue" : -13 }?

最后,你甚至能簡單地忽略掉從JSON(由于在應用中沒有完全匹配的POJO)中獲得的所有“多余的”屬性。你可以通過添加如下代碼完成這個操作:?
@JsonIgnoreProperties(ignoreUnknown=true)?
public class PojoWithAny {?
? public int value;?
}?

③選擇更多/更少(more/less)指定類型(specific types)時使用的注解?
在有些情況下,Jackson在讀入或輸出一個成員屬性時,所選用的類型(type)可能并不是你想要的:?
當讀取(反序列化)時,聲明的類型(declared type)可能是一個基本類型(general type),但是你確切地知道應該使用的實現類型(譯注:也就說,我們需要反序列化后生成的對象是實現類型的);?
當輸出(序列化)時,Jackson默認使用的是給定的運行時類型(the specific runtime type);但是你可能不想輸出那個類型的所有信息,而僅僅是它的父類型所囊括的信息。?
在這些應用場景,你可以使用如下的注解進行處理:?
public class ValueContainer {?
? // 雖然代碼中使用的類型(type)是'Value', 但我們希望讀取到的JSON 之后得到的對象的類型是'ValueImpl'?
? @JsonDeserialize(as=ValueImpl.class)?
? public Value value;?

? // 雖然運行時的類型(type)可能是'AdvancedType'(高級類型), 但是我們確實想序列化?
? // 成為'BasicType'(基礎類型); 有兩種處理方式:?
? @JsonSerialize(as=BasicType.class)?
? // 或者我們可以這樣: @JsonSerialize(typing=Typing.STATIC)?
? public BasicType another;?
}?

(2)中級?
①使用構造器或工廠方法?
在默認情況下,當由JSON數據創建相應類的實例時,Jackson嘗試使用該類的“默認”構造器(即無參數構造器)。不過,你可以選擇使用其他的構造器,或者一個靜態工廠方法,來創建實例。完成這個操作,你需要使用@JsonCreator注解,有可能還需要使用@JsonProperty注解給參數(arguments)綁定名稱。?
public class CtorPOJO {?
?? private final int _x, _y;?

?? @JsonCreator?
?? public CtorPOJO(@JsonProperty("x") int x, @JsonProperty("y") int y) {?
????? _x = x;?
????? _y = y;?
?? }?
}?

使用相同的方式,可以將@JsonCreator用在靜態工廠方法上。不過,還有一個可選的替代方案,被稱作“授權式”構建器(“delegating” creator):?

public class DelegatingPOJO {?
?? private final int _x, _y;?

?? @JsonCreator?
?? public DelegatingPOJO(Map<String,Object> delegate) {?
????? _x = (Integer) delegate.get("x");?
????? _y = (Integer) delegate.get("y");?
?? }?
}?

不同之處在于,構建器方法只能有一個參數,而且參數一定不要(must NOT)添加@JsonProperty注解。?

②處理多態類型(polymorphic types)?
如果你要進行讀取、輸出操作的對象擁有許多可能的子類型(即表現出多態性),你可能還需要添加一些類型信息。Jackson在反序列化時(讀取JSON數據,生成相應的對象)需要這些信息,以便能正確地讀取對象的類型。我們可以通過在“基本類型”上添加@JsonTypeInfo注解來完成操作:?
//將Java類的名稱(“com.myempl.ImplClass”)存儲到JSON的一個名稱為“class”的屬性中?
@JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY,property=”class”)?
public abstract class BaseClass {?
}?

public class Impl1 extends BaseClass {?
public int x;?
}?

public class Impl2 extends BaseClass {?
public String name;?
}?

public class PojoWithTypedObjects {?
public List<BaseClass> items;?
}?

這樣,序列化之后的JSON格式如下:?
{“items” : [?
{“class”:”Impl2”,? “name”: “Bob”},?
{“class”:”Impl1”, :”x” : 13}?
]}?

注意:這個注解還有很多配置可以進行設置,詳細內容請查閱瀏覽:?
Javadocs?
多態類型處理簡介I(ntro to polymorphic type handling)?


③重新設置屬性的自動發現(Changing property auto-detection)?
Jackson默認的屬性發現規則將會查找到如下所述的屬性:?
所有被public修飾的字段(成員變量);?
所有被public修飾的getter(即形如“getXxx()”的方法);?
所有被public修飾的setter(即形如“setXxx(value)”的方法),不管可見或不可見。?
不過如果這樣也不行,你可以通過使用使用注解@JsonAutoDetect來改變可見級別。如果你想自動發現所有的字段(就像GSON包所進行的操作那樣),你可以這樣做:?
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)?
public class POJOWithFields {?
private int value;?
}?
或者,你想禁用對所有字段的自動發現:?
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)?
public class POJOWithNoFields {?
//不會被序列化,除非再有一個可以訪問的“getValue”方法?
public int value;?
}?

拓展閱讀:?
列舉出的所有可用的Jackson注解?
文檔?
相關內容:?
數據綁定 模塊擁有更多文檔內容,畢竟它是注解的主要使用者。另外,這里有一些其他有用的鏈接:?
Jackson項目主頁?
o FasterXML Wiki中的注解文檔 ,涵蓋了1.x和2.0的注解。?
更多Jackson使用教程等詳細內容,請參見http://wiki.fasterxml.com/JacksonHome。[/size][/size]


本文轉自:http://wong-john.iteye.com/blog/1753402

轉載于:https://blog.51cto.com/chengxuyuan/1919549

總結

以上是生活随笔為你收集整理的Jackson注解学习参考的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91av一区 | 人妻精品久久久久中文字幕 | 中文字幕av播放 | 欧美性生活在线视频 | 国产在线精品成人欧美 | 中国一级片黄色一级片黄 | 国产又粗又黄又爽的视频 | 蜜臀av性久久久久蜜臀av麻豆 | 亚洲午夜精品在线 | 精品国产av鲁一鲁一区 | 韩国午夜av | 老鸭窝av在线 | www五月婷婷| 日韩a级片在线观看 | 18女人毛片 | www99热| 天堂最新资源在线 | 人妖一区 | 麻豆av在线播放 | 男同毛片 | 伊人院 | 久久亚洲AV无码专区成人国产 | 男人日女人网站 | 老妇荒淫牲艳史 | h片免费观看 | 日韩精品一区二区三区四区五区 | 日韩一区二区a片免费观看 伊人网综合在线 | 欧美精品18videosex性欧美 | 成人黄色在线视频 | 亚洲视频在线观看视频 | 亚洲永久精品视频 | 日韩高清欧美 | 日韩伦理大全 | 日本黄xxxxxxxxx100 | 中文字幕一区在线播放 | 国产成人自拍网站 | 国产喷水福利在线视频 | 欧美日韩国产成人在线 | 欧美一级二级三级 | 日本成人激情视频 | 寻找身体恐怖电影免费播放 | 色一涩 | 中文字幕黄色片 | 国产又粗又黄又爽又硬 | 波多野结衣家庭主妇 | 美女扒开粉嫩的尿囗给男生桶 | 免费福利小视频 | 欧美做受xxxxxⅹ性视频 | 国产一区二区四区 | 中文字字幕在线观看 | 黑人精品无码一区二区三区AV | 成人中文字幕在线观看 | 自拍偷拍亚洲天堂 | 日本在线中文 | www99re| 日本一区二区三区网站 | 四虎永久在线精品 | 亚洲日日日| 黄色成人av | 中文字幕亚洲乱码熟女一区二区 | 欧美午夜精品一区二区 | 丝袜黄色片 | 男人舔女人下部高潮全视频 | 亲子乱aⅴ一区二区三区 | 久久亚洲影视 | 日韩高清一区 | 91丨国产丨捆绑调教 | 久草福利在线观看 | 君岛美绪在线 | 国产chinesehd天美传媒 | 天天干夜夜爽 | 日韩在线观看视频一区二区 | 91在线精品入口 | 欧美黑人疯狂性受xxxxx野外 | 看全色黄大色黄大片大学生 | 靠逼动漫 | 97se在线| 日韩av在线网址 | 国产精品99999 | 日韩资源网 | 网站av在线| 岛国大片在线 | 日本亚洲欧美 | 国产精品综合一区二区 | 亚洲午夜精品久久久久久人妖 | 91在线精品秘密一区二区 | 日本高清三区 | 欧美午夜理伦三级在线观看 | 白浆在线 | 极品毛片 | 国语对白做受69 | 精品久久网站 | 男男免费视频 | 在线观看欧美一区二区三区 | 亚洲一级在线 | 福利视频一区二区三区 | 亚洲精品久久久久 | 公交上高潮的丁芷晴 | 99热这里只有精品在线观看 |