对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
消息转换器
您可以设置HttpMessageConverter
在 Java 配置中使用的实例,
通过覆盖configureMessageConverters()
.
您还可以在末尾通过覆盖extendMessageConverters()
.
在 Spring Boot 应用程序中,WebMvcAutoConfiguration 添加任何HttpMessageConverter 除了默认转换器之外,它还检测到的 bean。因此,在
引导应用程序,更喜欢使用 HttpMessageConverters 机制。或者,使用extendMessageConverters 修改消息转换器
在结尾。 |
以下示例使用自定义的ObjectMapper
而不是默认的:
-
Java
-
Kotlin
@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
.indentOutput(true)
.dateFormat(new SimpleDateFormat("yyyy-MM-dd"))
.modulesToInstall(new ParameterNamesModule());
converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
}
}
@Configuration
@EnableWebMvc
class WebConfiguration : WebMvcConfigurer {
override fun configureMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
val builder = Jackson2ObjectMapperBuilder()
.indentOutput(true)
.dateFormat(SimpleDateFormat("yyyy-MM-dd"))
.modulesToInstall(ParameterNamesModule())
converters.add(MappingJackson2HttpMessageConverter(builder.build()))
converters.add(MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()))
在前面的示例中,Jackson2ObjectMapperBuilder
用于创建两者的通用配置MappingJackson2HttpMessageConverter
和MappingJackson2XmlHttpMessageConverter
启用缩进后,自定义日期格式
以及jackson-module-parameter-names
,
这增加了对访问参数名称的支持(Java 8 中新增的功能)。
此构建器自定义 Jackson 的默认属性,如下所示:
如果在 Classpath 中检测到以下众所周知的模块,它还会自动注册它们:
-
jackson-datatype-joda:支持 Joda-Time 类型。
-
jackson-datatype-jsr310:支持 Java 8 日期和时间 API 类型。
-
jackson-datatype-jdk8:支持其他 Java 8 类型,例如
Optional
. -
jackson-module-kotlin
:支持 Kotlin 类和数据类。
使用 Jackson XML 支持启用缩进需要woodstox-core-asl dependency 之外jackson-dataformat-xml 一。 |
其他有趣的 Jackson 模块可用:
-
jackson-datatype-money:支持
javax.money
types (非官方模块)。 -
jackson-datatype-hibernate:支持 Hibernate 特定的类型和属性(包括延迟加载方面)。
以下示例显示了如何在 XML 中实现相同的配置:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper"/>
</bean>
<bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
<property name="objectMapper" ref="xmlMapper"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
p:indentOutput="true"
p:simpleDateFormat="yyyy-MM-dd"
p:modulesToInstall="com.fasterxml.jackson.module.paramnames.ParameterNamesModule"/>
<bean id="xmlMapper" parent="objectMapper" p:createXmlMapper="true"/>