訊息轉換器
您可以在 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
用於為 MappingJackson2HttpMessageConverter
和 MappingJackson2XmlHttpMessageConverter
建立通用組態,啟用縮排、自訂日期格式,並註冊 jackson-module-parameter-names
,它新增了對存取參數名稱的支援(Java 8 中新增的功能)。
此建構器自訂了 Jackson 的預設屬性如下
如果偵測到以下著名的模組在類別路徑上,它也會自動註冊它們
-
jackson-datatype-jsr310:支援 Java 8 日期和時間 API 類型。
-
jackson-datatype-jdk8:支援其他 Java 8 類型,例如
Optional
。 -
jackson-module-kotlin:支援 Kotlin 類別和資料類別。
使用 Jackson XML 支援啟用縮排需要 woodstox-core-asl 相依性,以及 jackson-dataformat-xml 相依性。 |
還有其他有趣的 Jackson 模組可用
-
jackson-datatype-money:支援
javax.money
類型(非官方模組)。 -
jackson-datatype-hibernate:支援 Hibernate 特定類型和屬性(包括延遲載入方面)。