Spring MVC 消息轉(zhuǎn)換器

2018-07-26 14:56 更新

使用MVC Java編程配置方式時,如果你想替換Spring MVC提供的默認(rèn)轉(zhuǎn)換器,完全定制自己的HttpMessageConverter,這可以通過覆寫configureMessageConverters()方法來實(shí)現(xiàn)。如果你只是想定制一下,或者想在默認(rèn)轉(zhuǎn)換器之外再添加其他的轉(zhuǎn)換器,那么可以通過覆寫extendMessageConverters()方法來實(shí)現(xiàn)。

下面是一段例子,它使用定制的ObjectMapper構(gòu)造了新的Jackson的JSON和XML轉(zhuǎn)換器,并用它們替換了默認(rèn)提供的轉(zhuǎn)換器:

    @Configuration
    @EnableWebMvc
    public class WebConfiguration extends WebMvcConfigurerAdapter {

        @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.xml().build()));
        }

    }

在上面的例子中,Jackson2ObjectMapperBuilder用于為MappingJackson2HttpMessageConverterMappingJackson2XmlHttpMessageConverter轉(zhuǎn)換器創(chuàng)建公共的配置,比如啟用tab縮進(jìn)、定制的日期格式,并注冊了一個模塊jackson-module-parameter-names用于獲取參數(shù)名(Java 8新增的特性)

除了jackson- dataformat-xml,要啟用Jackson XML的tab縮進(jìn)支持,還需要一個woodstox-core-asl依賴。

還有其他有用的Jackson模塊可以使用:

  1. jackson-datatype-money:提供了對javax.money類型的支持(非官方模塊)
  2. jackson-datatype-hibernate:提供了Hibernate相關(guān)的類型和屬性支持(包含懶加載aspects)

在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"/>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號