首页 > 解决方案 > 在 Springboot 中添加 @EnableWebMvc 会将日期输出从字符串更改为数组

问题描述

我创建了一个 springboot(2.0.6.RELEASE) 并在我的 application.yml 中放入了配置:

jackson:
    date-format: dd/MM/yyyy

所以当我的用户调用我的 API 时,每个日期都会返回,就像这样:

"vencimento": "01/07/2017" 

所以,现在我在我的项目中放了一个 CORS

@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

但是现在,我提交的所有日期都像这样返回:

"vencimento": [
            2017,
            1,
            7
        ],

有谁知道为什么?以及如何解决这个问题?tks

标签: javaspring-boot

解决方案


通过添加 @EnableWebMvc您对 Spring 说您想要完全控制 Spring MVC 配置。所以你需要手动配置 Jackson 对象映射器。

主要是添加这些设置:

objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

默认情况下,SerializationFeature.WRITE_DATES_AS_TIMESTAMPS已启用,它提供了一个与您类似的日期时间组件数组(fe,[2014,3,30,12,30,23,123456789]而不是"2014-03-30T12:30:23.123456789")。

如何在@Configuration 类中配置对象映射器并将其注册为bean 的示例(如果您不熟悉如何操作):

    @Bean
    public ObjectMapper jsonObjectMapper() {
        final ObjectMapper jsonMapper = new ObjectMapper();
        jsonMapper.registerModule(new JavaTimeModule());
        jsonMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

        //some other configuration like:
        jsonMapper.registerModule(new Jdk8Module());
        jsonMapper.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);

        return jsonMapper;
    }

推荐阅读