メッセージコンバーター
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-datatype-joda [GitHub] (英語) : Joda-Time 型のサポート。
jackson-datatype-jsr310 [GitHub] (英語) : Java 8 Date and Time API 型のサポート。
jackson-datatype-jdk8 [GitHub] (英語) :
Optional
など、他の Java 8 型のサポート。jackson-module-kotlin
[GitHub] (英語) : Kotlin クラスとデータクラスのサポート。
Jackson XML サポートでインデントを有効にするには、jackson-dataformat-xml (英語) に加えて woodstox-core-asl (英語) 依存関係が必要です。 |
他の興味深い Jackson モジュールが利用可能です:
jackson-datatype-money [GitHub] (英語) :
javax.money
型のサポート(非公式モジュール)。jackson-datatype-hibernate [GitHub] (英語) : 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"/>