訊息轉換器

你可以在 Java 配置中設定要使用的 HttpMessageConverter 例項,透過覆蓋 configureMessageConverters() 來替換預設使用的轉換器。你也可以透過覆蓋 extendMessageConverters() 在最後自定義配置的訊息轉換器列表。

在 Spring Boot 應用中,`WebMvcAutoConfiguration` 會在預設轉換器之外,新增其檢測到的任何 HttpMessageConverter bean。因此,在 Boot 應用中,最好使用 HttpMessageConverters 機制。或者,也可以使用 extendMessageConverters 在最後修改訊息轉換器。

以下示例添加了 XML 和 Jackson JSON 轉換器,並使用自定義的 ObjectMapper 替換了預設的轉換器

  • Java

  • Kotlin

  • Xml

@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()));
	}
}
@Configuration
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()))
	}
}
<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"/>

在前面的示例中,Jackson2ObjectMapperBuilder 用於為 MappingJackson2HttpMessageConverterMappingJackson2XmlHttpMessageConverter 建立通用配置,包括啟用縮排、自定義日期格式以及註冊 jackson-module-parameter-names,後者增加了對訪問引數名稱的支援(Java 8 中新增的功能)。

此 builder 如下自定義 Jackson 的預設屬性

如果以下知名模組在類路徑中被檢測到,它也會自動註冊

啟用 Jackson XML 支援的縮排功能需要 woodstox-core-asl 依賴項,除了 jackson-dataformat-xml 依賴項之外。

還有其他有趣的 Jackson 模組可用