Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

2024-04-18 1687阅读

有道无术,术尚可求,有术无道,止于术。

本系列Jackson 版本 2.17.0

本系列Spring Boot 版本 3.2.4

源码地址:https://gitee.com/pearl-organization/study-jaskson-demo

文章目录

    • 1. 前言
    • 2. 起步依赖
    • 3. 自动配置
      • 3.1 JacksonProperties
      • 3.2 JacksonAutoConfiguration
        • 3.2.1 JacksonMixinConfiguration
        • 3.2.2 JacksonObjectMapperBuilderConfiguration
        • 3.2.3 JacksonObjectMapperConfiguration
        • 3.2.4 ParameterNamesModuleConfiguration
        • 3.2.5 Jackson2ObjectMapperBuilderCustomizerConfiguration
        • 3.3 Jackson2ObjectMapperBuilderCustomizer

          1. 前言

          Spring Boot是当前最流行的Java应用开发框架,简化开发的同时也导致了很多开发人员只会写业务代码,并不太清楚内部组件和配置细节,一旦出问题或者需要性能优化时,就会显得无从下手。

          所以推荐大家要多学习一下基础的应用框架,了解它们的详细用法和核心原理,不要太依赖于Spring Boot的自动化。

          接下来我们学习Spring Boot是如何集成的Jackson,并针对开发中常见的问题进行实战演示。

          2. 起步依赖

          Spring Boot起步依赖(Starter Dependency)机制,针对常见场景需要的依赖进行了统一打包处理,使用时只需要引入Starter包即可。

          例如针对JSON应用场景,在Spring Boot中提供了spring-boot-starter-json启动器,默认引入的JSON库是Jackson:

          dependencies {
          	api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter"))
          	api("org.springframework:spring-web")
          	api("com.fasterxml.jackson.core:jackson-databind")
          	api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8")
          	api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
          	api("com.fasterxml.jackson.module:jackson-module-parameter-names")
          }
          

          除了jackson-databind,还引入非核心模块jackson-datatype-jdk8、jackson-datatype-jsr310、jackson-module-parameter-names,所以在Spring Boot环境中,可以直接处理LocalDateTime。

          3. 自动配置

          Spring Boot基于约定大于配置思想,引入了Starter包后,启动时扫描自动配置类,并自动装配声明的Bean组件,开发者无需手动进行繁琐的配置,从而提高了开发效率,降低了维护成本。

          spring-boot-autoconfigure模块中包含了对Jackson的自动配置:

          Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

          3.1 JacksonProperties

          Spring Boot 提供了配置属性类JacksonProperties,方便我们直接在application.yml配置文件中指定一些转换策略:

          Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

          全部属性配置如下:

          spring:
            jackson:
              constructor-detector: EXPLICIT_ONLY
              # 设置日志格式化格式,配置为日期格式字符串或完全限定的日期格式类名。例如 yyyy-MM-dd HH:mm:ss
              date-format: yyyy-MM-dd HH:mm:ss
              # 宽松的全局默认设置
              default-leniency: true
              # 控制序列化期间包含的属性。使用 Jackson 的 JsonInclude.Include 枚举中的值之一进行配置。
              default-property-inclusion: always
              # 序列化配置 ,MAP 集合 , Map
              serialization:
                EAGER_SERIALIZER_FETCH: true
              # 反序列化特征,Map
              deserialization:
                USE_BIG_DECIMAL_FOR_FLOATS: true
              # ObjectMapper/JsonMapper特征,Map
              mapper:
                AUTO_DETECT_GETTERS: true
              # 生成器JsonGenerator.Feature,Map
              generator:
                AUTO_CLOSE_TARGET: true
              # 地区
              locale: zh_CN
              # 解析器 Map
              # parser:
              # 设置属性命名策略,对应jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json驼峰式转下划线,json body下划线传到后端自动转驼峰式
              property-naming-strategy: SNAKE_CASE
              # 全局时区
              time-zone: GMT+8
              # 可见性阈值,可用于限制自动检测哪些方法(和字段)。
              visibility:
                GETTER: ANY
          

          3.2 JacksonAutoConfiguration

          Spring Boot 提供了自动配置类JacksonAutoConfiguration,包含了多个内部配置类:

          Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

          在自动配置类的static 块中,配置了两个默认特征,设置序列化日志时间不使用时间戳,并注册JsonComponentModule Bean 对象,用于注册所有@JsonComponent标识的Bean:

          @AutoConfiguration
          @ConditionalOnClass({ObjectMapper.class})
          public class JacksonAutoConfiguration {
              @Bean
              public JsonComponentModule jsonComponentModule() {
                  return new JsonComponentModule();
              }
              
              private static final Map
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]