メッセージコンバーター

configureMessageConverters() (Javadoc) をオーバーライドすることで、デフォルトで使用されるインスタンスを置き換えて、Java 構成で使用する HttpMessageConverter インスタンスを設定できます。extendMessageConverters() (Javadoc) をオーバーライドすることで、最後に構成されたメッセージコンバーターのリストをカスタマイズすることもできます。

Spring Boot アプリケーションでは、WebMvcAutoConfiguration は、デフォルトのコンバーターに加えて、検出した HttpMessageConverter Bean を追加します。Boot アプリケーションでは、HttpMessageConverters メカニズムを使用することをお勧めします。または、extendMessageConverters を使用して、最後にメッセージコンバーターを変更します。

次の例では、XML コンバーターと Jackson JSON コンバーターを、デフォルトの代わりにカスタマイズされた 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 (Javadoc) を使用して、インデントを有効にして MappingJackson2HttpMessageConverter と MappingJackson2XmlHttpMessageConverter の両方に共通の構成を作成し、日付形式をカスタマイズし、パラメーター名へのアクセスのサポートを追加する jackson-module-parameter-names [GitHub] (英語) の登録を追加します(Java 8 で追加された機能)。

このビルダーは、Jackson のデフォルトプロパティを次のようにカスタマイズします。

また、次の既知のモジュールがクラスパスで検出された場合、自動的に登録します。

Jackson XML サポートでインデントを有効にするには、jackson-dataformat-xml (英語) に加えて woodstox-core-asl (英語) 依存関係が必要です。

他の興味深い Jackson モジュールが利用可能です:

次の例は、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"/>