【问题标题】:Configure MappingJackson2HttpMessageConverter by using java-configuration使用 java-configuration 配置 MappingJackson2HttpMessageConverter
【发布时间】:2016-08-22 18:11:21
【问题描述】:

我正在尝试配置 MappingJackson2HttpMessageConverter,因为我想禁用 WRITE_DATES_TO_TIMESTAMP 功能。

如果我通过 xml-configuration 配置它,它会成功运行

<bean name="jacksonObjectMapper"
    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    <property name="featuresToDisable">
        <array>
            <util:constant
                static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS" />
        </array>
    </property>
</bean>
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="jacksonObjectMapper" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

但是当我尝试通过 java-configuration 进行配置时,转换器已注册但序列化忽略了映射器的配置。

我尝试了不同的方法。

方法 1

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    ObjectMapper mapper = new ObjectMapper();
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    converters.add(new MappingJackson2HttpMessageConverter(mapper));
}
}

方法 2

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    for (HttpMessageConverter<?> converter : converters) {
        if (converter instanceof MappingJackson2HttpMessageConverter) {
        MappingJackson2HttpMessageConverter jacksonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
        ObjectMapper objectMapper = jacksonMessageConverter.getObjectMapper();
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        break;
        }
    }
}

}

【问题讨论】:

    标签: java spring spring-mvc jackson converter


    【解决方案1】:

    试试下面的方法:

    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        ...
        @Override
        public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
            Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
            builder.dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
            builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        }
        ...
    }
    

    【讨论】:

      【解决方案2】:

      这也适用于我

      @Bean
      public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
          Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
          builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
          return builder;
      }
      

      【讨论】:

        【解决方案3】:

        也许您在 xml 中仍然有注释驱动?

        其中还注册了默认的 messageConverters 和 objectmappers。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-01
          • 2018-07-10
          • 2023-03-02
          • 2018-11-08
          • 1970-01-01
          相关资源
          最近更新 更多