內(nèi)容:所有原創(chuàng)文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;
jackson學(xué)習(xí)之一:基本信息
jackson學(xué)習(xí)之二:jackson-core
jackson學(xué)習(xí)之三:常用API操作
jackson學(xué)習(xí)之四:WRAP_ROOT_VALUE(root對象)
jackson學(xué)習(xí)之五:JsonInclude注解
jackson學(xué)習(xí)之六:常用類注解
jackson學(xué)習(xí)之七:常用Field注解
jackson學(xué)習(xí)之八:常用方法注解
jackson學(xué)習(xí)之九:springboot整合(配置文件)
jackson學(xué)習(xí)之十(終篇):springboot整合(配置類)
本文是《jackson學(xué)習(xí)》系列的第一篇,先來一起了解jackson:
按照官網(wǎng)所述,jackson是java技術(shù)棧內(nèi)最好的JSON解析工具(best JSON parser for Java);
除了JSON解析,jackson還是個(gè)數(shù)據(jù)處理工具集:基于流的解析庫和生成庫、數(shù)據(jù)綁定、數(shù)據(jù)格式化模塊(Avro、XML、Protobuf、YAML等);
jackson共有1.x和2.x兩個(gè)版本系列,其中1.x已廢棄不再有版本發(fā)布,2.x是活躍版本;
1.x和2.x不兼容,如果您的代碼已經(jīng)使用了1.x,現(xiàn)在想改用2.x,您就必須修改使用jackson的那部分代碼;
雖然不兼容,但是1.x和2.x不沖突,您的項(xiàng)目可以在pom.xml中同時(shí)依賴這兩個(gè)版本,假設(shè)您原有三處代碼調(diào)用了1.x的API,現(xiàn)在可以把一處改成2.x的,另外兩處維持不變,這個(gè)特性適合將項(xiàng)目逐步從1.x升級到2.x(This is by design and was chosen as the strategy to allow smoother migration from 1.x to 2.x.);
2.x系列版本中,有的版本已關(guān)閉(除非bug或者安全問題才會(huì)發(fā)布新的小版本),有的版本還處于活躍狀態(tài),
jackson有三個(gè)核心模塊,如下,括號內(nèi)是maven的artifactId:
Streaming(jackson-core):低階API庫,提供流式解析工具JsonParser,流式生成工具JsonGenerator;
Annotations(jackson-annotations):jackson注解;
Databind (jackson-databind):基于java對象的序列化、反序列化能力,需要前面兩個(gè)模塊的支持才能實(shí)現(xiàn);
當(dāng)我們用jackson做JSON操作時(shí),常用的是Databind模塊的ObjectMapper類,對處于核心位置的jackson-core反倒是很少直接用到,那么該模塊有什么作用呢?
如下圖,BeanSerializer是jackson-databind的功能類,其serialize方法負(fù)責(zé)將java對象轉(zhuǎn)為JSON,方法中的處理邏輯就是調(diào)用JsonGenerator的API,而JsonGenerator就是jackson-core中負(fù)責(zé)序列化的主要功能類: