
享学Jackson
Jackson是全球最为流行(最好)的JVM平台JSON库,Spring生态的加持更使得它成为了Java开发者必会的基础技能之一。
本专栏由浅入深的介绍Jackson的使用、原理、高级定制...最终让你有信心做到一个项目仅一个JSON库足矣。增加你的硬核实力,提升你的核心竞争力
YourBatman
也许当我老了,也一样写代码。不为别的,只为了爱好。
展开
-
[享学Jackson] 二、jackson-core之流式API与JsonFactory、JsonGenerator、JsonParser
`jackson-core`是三大核心模块之一,并且它是核心中的核心,它提供了对JSON数据的**完整支持**。此模块提供了最具底层的Streaming JSON解析器/生成器,这组流式API属于Low-Level API,具有非常显著的特点:- 开销小,损耗小,性能极高- 因为是Low-Level API,所以灵活度极高- 又因为是Low-Level API,所以易错性高,可读性差`jackson-core`模块提供了两种处理JSON的方式(整个Jackson一共3种):1. 流式API:读原创 2019-12-29 01:22:13 · 7344 阅读 · 0 评论 -
[享学Jackson] 一、初识Jackson -- 世界上最好的JSON库
首个付费专栏,你懂的。原创 2019-12-27 23:32:24 · 22215 阅读 · 12 评论 -
[享学Jackson] 二十二、Jackson与Fastjson的恩怨情仇(完结篇)
毋庸置疑,Jackson是全球范围内最为流行的JSON库,但`Fastjson`背靠大树阿里,在中国积累了不少“忠粉”,流行程度也不容小觑,甚至大有中国最流行的JSON库之趋势。对于`Jackson与Fastjson`是很多同学茶余饭后常讨论的小话题,毕竟正面相争必有些江湖恩怨。本文**不会带有个人意见**去对比这两个大作,因为感觉自己还不够格。所以我仅作为知识的搬运工,搜集一些资料展示给大家,省得同学们跑动跑西弄得晕头转向。原创 2020-02-07 15:22:09 · 9167 阅读 · 8 评论 -
[享学Jackson] 二十一、Spring Boot下的Jackson --- JacksonAutoConfiguration自动配置
相信到了这里,你应该清楚本专栏讲解Jackson的脉络:**Jackson基础 -> Jackson进阶 -> Spring MVC下的Jackson -> Spring Boot下的Jackson**。不同于大多快餐式技术博客文章:只说其表,不道其里。上来就在`Spring Boot`环境下讲解Jackson,我觉得是不妥的,这**特别容易对小伙伴对Jackson的了解造成误导**,这是我比较可担忧的。读本文之前,我强烈建议你已经了解过**前二十篇文章**的描述和知识铺陈,因为本专栏不仅仅只希望你懂原创 2020-02-05 16:42:03 · 5171 阅读 · 2 评论 -
[享学Jackson] 二十、Spring MVC下的Jackson --- MappingJackson2HttpMessageConverter
`Spring MVC`是通过`HttpMessageConverter`消息转换器来与Jackson库整合的(其实只是使用了Jackson库来解析JSON格式的消息而已)。需要注意的是:它默认支持的不仅仅只有Jackson,还有JavaEE标准技术的`javax.json.bind.Jsonb`以及谷歌公司的`Gson`。大多数程序员很少接触过`Jackson`,是因为`Spring`把它“隐藏”得很深。知道`HttpMessageConverter`本来就很少,更何况隐藏在其之下的`Jackson`原创 2020-02-04 01:14:13 · 3746 阅读 · 3 评论 -
[享学Jackson] 十九、Spring下使用ObjectMapper的正确姿势 --- Jackson2ObjectMapperFactoryBean
Spring作为现代Java企业级应用的实际标准,什么组件(中间件)都需要跟它“有一腿”。因此,自然我们需要知道在Spring下如何正确使用`ObjectMapper`。上篇文章详细介绍了Jackson和Spring容器深度整合的方式,并且从API 原理层面了解到了深度整合的细节。本专栏开始我便说过:我极力推荐一个工程了只需要一个JSON库即可,而这个唯一便是Jackson。到了专栏这个节点,站在使用层面,相信你更加关心和更想知道的是**Spring下使用ObjectMapper的正确姿势 **是什么,原创 2020-02-02 20:59:05 · 4567 阅读 · 2 评论 -
[享学Jackson] 十八、Spring容器深度整合Jackson的桥梁之SpringHandlerInstantiator
上篇文章介绍了"spring-web整合Jackson源码解析之`Jackson2ObjectMapperBuilder`",它是`Spring`为开发者提供的一个便捷构建`ObjectMapper`实例的构建器工具。Spring内部自己没有使用,但推荐开发者在Spring环境下使用该构建器来快速构建`ObjectMapper`实例,代替使用传统的`new`关键字。该构建器不仅可单独使用,同时也提供了钩子允许我们和Spring容器进行深度整合,从而可**使用Spring容器内的资源(包括Bean/属性值原创 2020-02-02 17:19:01 · 2805 阅读 · 2 评论 -
[享学Jackson] 十七、spring-web整合Jackson源码解析之Jackson2ObjectMapperBuilder
上一篇文章介绍了`Jackson`在`Spring MVC`中的使用,并且在**应用层面**重点讲述了它对新、老时间类型的处理表现,理论上对你实际工作会有不小帮助。你可能对它的原理也会感兴趣,从本篇文章开始将用几篇文章的篇幅,从原理、源码层面进一步阐述`spring-web`对`Jackson`库的支持,掌握原理后再去深度定制开发。原创 2020-01-30 19:27:53 · 5401 阅读 · 0 评论 -
[享学Jackson] 十六、Jackson在Spring MVC中的使用之Date、JSR310时间类型的处理
由于我们很少(并不代表没有)单独去使用Jackson库,所以从此篇文章开始聚焦于更具有实践意义的场景:Jackson在Spring生态下的运用。虽然现在`Spring Boot`非常流行,但我并不会一上来就向大家介绍更加工程化的它。因为`Spring Boot`仍还是构建在Spring之上的应用,所以如果仅仅是告诉大家如何使用似乎违背了我做此专栏的初心。所以我就遵循我的一贯习惯:**从更为底层出发,深入了解然后釜底抽薪,剩下来的便可无师自通**。强调说明:**本文的讲解基于的是`Spring MVC原创 2020-01-25 23:18:59 · 3614 阅读 · 2 评论 -
[享学Jackson] 十五、第三方模块Module的深度实践:JavaTimeModule、JSR310Module、ParameterNamesModule、Jdk8Module
本专栏的第一篇文章就概括性的介绍了Jackson繁荣的生态:除了三大核心模块之外还存在非常多的第三方模块来为`Jackson`附加提供强大的能力。有官方主导维护的模块,当然也有第三方社区自主维护的Module。上篇文章讲解了Jackson对模块的管理和运行原理,那么本文将站在实用的角度,选取三个最流行、**工作中100%会用到**的第三方模块作为示例进行讲解,这样既能让小伙伴们加深对Jackson模块机制的理解,又能在实际工作中得以应用,可谓一箭双雕。原创 2020-01-24 16:17:28 · 5149 阅读 · 0 评论 -
[享学Jackson] 十四、深入理解Jackson的Module模块化设计及原理分析
模块化定义:解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。它一般有如下特点:- 可被管理- 可插拔- 工作模式具有一定独立性、隔离性- **可以有依赖模块**模块化,对于我们程序员来说是一个既熟悉又陌生的概念,比如`Java 9`最大的一个Feature便是模块化。模块简单理解它就是一个功能合集,**是一种封装思想的体现**。我们知道`Jackson`它之所有流行且经久不衰是因为它具有高扩展性,能够与时俱进(比如快速支持到JSR310时间的序列化/原创 2020-01-21 17:48:22 · 5713 阅读 · 0 评论 -
[享学Jackson] 十三、jackson-annotation注解模块全解析及Jackson注解大全
`Jackson`之所以流行得益于它强大的模块化设计,以及它提供的强大能力。而支撑它强大能力的很大一部分原因是得益于它完善的注解模块:**它提供了非常多的注解,可以让你在运行期“个性化控制”你的序列化/反序列化行为,从而具有非常高的弹性**。前面花了好几篇文章大篇幅介绍`Jackson`的`Feature`特征以及原理,如果说Feature是全局设置,那么注解就是个性化配置,因此相比较起来面向应用、面向开发者的注解, 理解它的含义以及使用方式显得更加重要,是**程序员必备的基础知识之一**。原创 2020-01-20 21:31:13 · 4202 阅读 · 6 评论 -
[享学Jackson] 十二、jackson-databind反序列化之ObjectMapper反序列化原理、JsonDeserializer反序列化器全解析
前面两篇文章花大篇幅介绍了序列化、序列化器以及`ObjectMapper`序列化的原理,相信认真品读过的你对序列化/反序列化方面已经有比较全面的认识了。本篇文章作为前两篇的**姊妹篇**,将介绍反序列化、`JsonDeserializer`反序列化器的相关内容。该文不会像前两篇讲述得那么详细,因此建议你阅读此文之前先有前两篇文章相关知识的积累。原创 2020-01-19 20:31:23 · 5556 阅读 · 3 评论 -
[享学Jackson] 十一、jackson-databind之JsonSerializer序列化器全解析
序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。该概念可以理解为如下两个两点:- 在序列化期间,对象将其当前状态写入到**临时或持久性存储区**(内存or硬盘)- 以后,可以通过从存储区中读取或反序列化对象的状态,**重新创建该对象**序列化使其他代码可以查看或修改,那些不序列化便无法访问的对象实例数据。通常,对象实例的**所有字段都会被序列化**,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不原创 2020-01-14 17:41:23 · 3951 阅读 · 0 评论 -
[享学Jackson] 十、jackson-databind序列化之ObjectMapper序列化原理、序列化器匹配原理
序列化/反序列作高层API的核心概念,重要程度可见一斑。但是关于序列化/反序列化是什么,大多数小伙伴其实停留在概念阶段,并不知其内幕。> 说明:本文讨论的序列化/反序列化自然是是关注JSON方面的学习本专栏定位,就是要把自己放在专业人士的位置,要能实现Jackson的高级定制。而若想具备此能力,自然需要知道很多技术细节和其内部的实现步骤/原理。原创 2020-01-13 21:41:47 · 5116 阅读 · 0 评论 -
[享学Jackson] 九、jackson-databind数据绑定序列化/反序列化配置之SerializationConfig、DeserializationConfig
说到JSON库,必然离不开序列化和反序列的概念。上篇文章已经介绍了解了数据绑定的基础配置,本篇将继续讲解更加偏向于实战的:序列化/反序列化配置之`SerializationConfig、DeserializationConfig`。小提示:因为文章内容的讲述是按顺序的,因此建议看本文之前确保已经阅读过了上篇文章的内容。原创 2020-01-05 23:05:21 · 3772 阅读 · 0 评论 -
[享学Jackson] 八、jackson-databind数据绑定基础配置之BaseSettings、MapperConfig、MapperConfigBase
通过前几篇文章的描述,我们了解到了Jackson它在各个层次上的Feature特征的含义,甚至实现的原理。从本文开始,将从实战出发,去看看如何运用到这么多特征配置,并且如何定制和配置他们。Jackson的底层流式API逻辑上相对简单,并且就刚刚在上篇文章以`JsonFactory`为例详细介绍了它的原理以及使用,所以本文的重点将放在更高层的API,也就是`jackson-databind`模块下的配置讲解,也就是我们接触最多的两个概念:序列化、反序列化。原创 2020-01-05 16:48:45 · 3317 阅读 · 2 评论 -
[享学Jackson] 七、Jackson使用bit位运算来开启/禁用Feature的原理解析
前面几篇文章介绍了Jackson库针对不同层次提供的多个Feature特征,这些特征能让使用者可以在不需要理解内部实现的情况下,控制/参与到JSON内部读/写规则。Feature是Jackson库非常重要的一个概念,**它是使用者和JSON续写规则打交道的窗户** 。作为单纯的使用者来说,其实只需知道各个特征值什么含义了便可。但经过反馈和我的调研,由于经常打交道,不少朋友还是想稍微深入了解下这块的实现原理的,因此本文就花篇幅专门介绍这块的知识点原创 2020-01-04 21:50:34 · 2572 阅读 · 0 评论 -
[享学Jackson] 六、控制Jackson行为的特征们之MapperFeature、SerializationFeature、DeserializationFeature
Jackson工具库之所以流行,绝不是因为它有很高的性能表现,而是它拥有更好用的API:高层API。正所谓能够流行开来的技术一定是不太需要动脑子的,否则它不可能流行起来。在Jackson里,`ObjectMapper/JsonMapper`就承担了这样的角色,它甚至被称为和用户打交道的"唯一"入口。序列化/反序列化,包括数据绑定/映射是一套比较复杂的操作,而Jackson为了方便使用者的定制和使用,分别提供了若干Feature特征给使用者直接定制,而不用过多的去了解其内部细节。本文就从这三个方面,分别介原创 2020-01-02 22:57:52 · 6348 阅读 · 0 评论 -
[享学Jackson] 五、控制Jackson行为的特征们之JsonWriteFeature、JsonReadFeature
上篇文章介绍了`JsonGenerator.Feature、JsonParser.Feature`这两个内部类的Feature特性,可以发现自`2.10`版本后,大部分特性都被标记为了`@Deprecated`过期了,可以思考框架的设计者出于什么原因为何需要这么做呢?本文将去了解她们的替代品:`JsonWriteFeature和JsonReadFeature`,它俩都实现了接口`FormatFeature`,这个接口规定了一些属性/行为,这为Jackson**规范化特性的处理**起到了很大的积极作用,这原创 2019-12-30 17:48:21 · 6292 阅读 · 6 评论 -
[享学Jackson] 四、控制Jackson行为的特征们之JsonFactory.Feature、JsonGenerator.Feature、JsonParser.Feature
Jackson在各个模块、功能点都提供了大量的钩子,让可以通过配置Feature的方式就能改变读/写的行为,因此深入了解Jackson的xxxFeature是深入理解Jackson的必备前置知识。原创 2019-12-29 21:47:47 · 3532 阅读 · 2 评论 -
[享学Jackson] 三、jackson-databind之ObjectMapper与数据绑定、树模型
`jackson-databind`包含用于Jackson数据处理器的通用**数据绑定功能**和**树模型**。它构建在Streaming API(流解析器/生成器)之上,并使用Jackson注解进行配置。它就是Jackson提供的高层API,是开发者使用得最多的方式,因此重要程度可见一斑。虽然Jackson最初的用例是JSON数据绑定,但现在它**也可以用于其他数据格式**,只要存在解析器和生成器实现即可。但需要注意的是:类的命名在很多地方仍旧使用了“JSON”这个词,尽管它与JSON格式没有实际的硬原创 2019-12-29 16:12:36 · 5324 阅读 · 1 评论