消息转换器
您可以通过重写 configureMessageConverters()
,
在Java配置中设置要使用的 HttpMessageConverter
实例,替换默认使用的实例。您也可以通过重写
extendMessageConverters()
,
在最后定制配置的消息转换器列表。
在 Infra App 应用程序中,WebMvcAutoConfiguration 除了默认转换器外,还会添加它检测到的任何
HttpMessageConverter Bean。或者,也可以使用 extendMessageConverters 在最后修改消息转换器。
|
以下示例添加了 XML 和 Jackson JSON 转换器,并使用自定义的 ObjectMapper
替换默认的转换器:
@Configuration
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()));
}
}
在前面的示例中,
Jackson2ObjectMapperBuilder
用于为 MappingJackson2HttpMessageConverter
和 MappingJackson2XmlHttpMessageConverter
创建一个通用配置,启用缩进,自定义日期格式,并注册
jackson-module-parameter-names
,
这增加了对访问参数名称的支持(Java 8 中新增的功能)。
此构建器按以下方式自定义 Jackson 的默认属性:
它还自动注册以下知名模块(如果它们在类路径上被检测到):
-
jackson-datatype-joda: 支持 Joda-Time 类型。
-
jackson-datatype-jsr310: 支持 Java 8 日期和时间 API 类型。
-
jackson-datatype-jdk8: 支持其他 Java 8 类型,如
Optional
。
注意:启用 Jackson XML 支持的缩进需要除了
woodstox-core-asl
依赖项外,还需要 jackson-dataformat-xml
依赖项。
其他有趣的 Jackson 模块包括:
-
jackson-datatype-money: 支持
javax.money
类型(非官方模块)。 -
jackson-datatype-hibernate: 支持 Hibernate 特定类型和属性(包括延迟加载方面)。