58、SpringBoot 配置及定制Jackson的ObjectMapper-->ObjectMapper 是 Jackson 来处理 Json 以及 xml 转换的一个核心 API

SpringBoot 配置及定制 Jackson 的 ObjectMapper


配置ObjectMapper

ObjectMapper 是 Jackson 来处理 Json 以及 xml 转换的一个核心 API

就是用于实现 对象 与 json 、 对象 与 xml 的响应类型格式的转换

只要Spring Boot在类加载路径中检测到Jackson库(spring-boot-starter-web 里面默认就依赖了Jackson库),就会自动配置ObjectMapper(转换XML用其子类:XmlMapper)。

Spring Boot检测到Jackson Dataformat XML库,就会自动配置 XmlMapper

 ObjectMapper(父类) ---- >   XmlMapper (子类)  和 JsonMapper (子类)
 XmlMapper  :实现 对象 与 xml 之间的格式转换
 JsonMapper :实现 对象 与 json 之间的格式转换

因此程序只要对ObjectMapper进行配置,最终会影响它的子类。

ObjectMapper \ XmlMapper \ JsonMapper,都是Jackson的API,而不是Spring的API。

通过 application.properties 文件可对Jackson的ObjectMapper(其实是对其子类)进行定制,可通过如下属性进行定制:

spring.jackson.date-format:该属性指定处理字符串所用的日期时间格式。

spring.jackson.deserialization:该属性用于指定Jackson反序列化时的各种属性,
它可指定com.fasterxml.jackson.databind.DeserializationFeature枚举列出的各枚举值对应的子属性。

spring.jackson.default-property-inclusion:指定处理字符串时是否包含默认属性,
该属性支持always、non_null、non_absent、non_default、non_empty这几个属性值。

【总结】 所有有关Jackson的ObjectMapper的配置属性,都可通过spring.jackson.*开头的属性进行配置。


代码来自:56、springboot ------ RESTful服务及RESTful接口设计

定制ObjectMapper(编程式的方式)


定制ObjectMapper的方式:

方式1:通过自定义 Jackson2ObjectMapperBuilderCustomizer 这个定制化器 来进行定制。
方式2:通过自定义Module进行定制。
方式3:完全替换Spring Boot的ObjectMapper

——这种方式是完全放弃Spring Boot所提供的自动配置。


方式1:Jackson2ObjectMapperBuilderCustomizer

Spring Boot本身就是使用Jackson2ObjectMapperBuilderCustomizer执行定制的,
Spring本身提供的Jackson2ObjectMapperBuilderCustomizer的order为0, 优先级比较高。

为自定义Jackson2ObjectMapperBuilderCustomizer指定不同的order值,
自定义Jackson2ObjectMapperBuilderCustomizer既可在 应用在Spring Boot内置的Jackson2ObjectMapperBuilderCustomizer之前, 也可应用在它之后。


代码演示:

实现接口:

创建一个自定义的ObjectMapper类来实现 Jackson2ObjectMapperBuilderCustomizer 这个定制化器接口

定制内容就是对转成 json 格式的数据进行缩进,默认是缩进2格

在这里插入图片描述


添加依赖

依赖是只有这个 xml
在这里插入图片描述


测试结果:

在这里插入图片描述


方式2: Jackson原生方式,通过自定义Module进行定制

Jackson本身就是使用Moddule来对ObjectMapper执行定制的。

所有继承com.fasterxml.jackson.databind.Module基类的Bean都会被自动注册给Jackson2ObjectMapperBuilder对象

Jackson2ObjectMapperBuilder会将它应用到所创建的所有ObjectMapper上,

因此也可通过添加自定义Module子类Bean来定制Jackson的ObjectMapper。


方式3:完全替换ObjectMapper

使用@Bean定义自己的ObjectMapper、并使用@Primary注解修饰它,
这个自定义的ObjectMapper就会代替Spring Boot自动配置的ObjectMapper。

使用@Bean定义自己的Jackson2ObjectMapperBuilder,它会代替自动配置的Jackson2ObjectMapperBuilder,
用自己的Builder来代替spring Boot自动配置的Builder。

这样Spring Boot将会使用自定义的Jackson2ObjectMapperBuilder来创建ObjectMapper。

——无论如何,Spring Boot总是使用Jackson2ObjectMapperBuilder(自动配置|手动配置)来创建ObjectMapper。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值