购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 自定义Jackson ObjectMapper

在一个HTTP交互中,SpringMVC使用HttpMessageConverters协商内容转换。如果classpath下存在Jackson,就能获取到Jackson2ObjectMapperBuilder提供的默认转换器,这是SpringBoot自动配置的实例。创建的ObjectMapper(或用于JacksonXML转换的XmlMapper)实例默认有以下自定义属性:

SpringBoot也有一些用于简化自定义该行为的特性。

可以使用当前的environment配置ObjectMapper和XmlMapper实例。Jackson提供一个扩展套件,可以用来关闭或开启一些特性,可以用它们配置Jackson以处理不同方面。这些特性在Jackson中是使用6个枚举描述的,并被映射到environment的属性上,具体的描述见表4.1。

表4.1 Jackson扩展套件

如设置spring.jackson.serialization.indent_output=true可以美化打印输出(prettyprint)。注意,由于松散绑定的使用,indent_output不必匹配对应的枚举常量INDENT_OUTPUT。

基于environment的配置会应用到自动配置的Jackson2ObjectMapperBuilderbean,然后应用到通过该builder创建的mappers,包括自动配置的ObjectMapperbean。ApplicationContext中的Jackson2ObjectMapperBuilder可以通过Jackson2ObjectMapperBuilderCustomizer的bean自定义。这些customizerbeans可以排序,SpringBoot自己的customizer序号为0,其他自定义可以应用到SpringBoot自定义之前或者之后。

所有类型为com.fasterxml.jackson.databind.Module的beans都会自动注册到自动配置的Jackson2ObjectMapperBuilder,并应用到它创建的任何ObjectMapper实例。这提供了一种全局机制,用于在为应用添加新特性时贡献自定义模块。

如果想完全替换默认的ObjectMapper,你既可以定义该类型的@Bean,并注解@Primary,也可以定义Jackson2ObjectMapperBuilder,通过builder构建。注意不管哪种方式都会禁用所有的自动配置ObjectMapper。

如果你提供MappingJackson2HttpMessageConverter类型的@Bean,它们将替换MVC配置中的默认值。SpringBoot也提供了一个HttpMessageConverters类型的便利bean(如果你使用MVC默认配置,那它就总是可用的),它提供了一些有用的方法来获取默认和用户增强的消息转换器(message converters)。

1.SpringBoot自定义Jackson配置

为了在SpringBoot工程中集中解决long类型转成json时,json数据丢失精度问题和统一设置常见日期类型序列化格式,可以自定义Jackson配置类,代码如下所示:

实体类如下所示

请控制层

启动工程,请求地址http://127.0.0.1:8080/getStrig?lo=8857976746795498512返回的lo就是字符串类型的json数据了,而不是一个long类型的数据,这样就可以防止数据丢失。 JEeHz+kAlKMoIFrpOWDmeuliZ0W1CRdADeOgTIUv5ZCRk0Tm8YXgaV5G6buz7IsM

点击中间区域
呼出菜单
上一章
目录
下一章
×