在Springboot中添加@EnableWebMvc会将日期输出从字符串更改为数组

时间:2019-02-28 19:04:31

标签: java spring-boot

我创建了一个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

2 个答案:

答案 0 :(得分:2)

添加@EnableWebMvc you're saying to Spring that you want to get the full control over Spring MVC configuration。因此,您需要手动配置Jackson对象映射器。

主要是添加以下设置:

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

默认情况下,启用SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,它会提供一系列类似于您的日期时间分量(例如,[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;
    }

答案 1 :(得分:0)

CROSP说过,启用@EnableWebMvc将关闭Spring Boot中的默认设置。以下是我不使用@EnableWebMvc批注的情况下配置CORS的方法:

@Configuration
class CorsConfig {

  @Bean
  fun corsConfigurer() = object : WebMvcConfigurer {
    override fun addCorsMappings(registry: CorsRegistry) {
      registry.addMapping("/**").allowedOrigins("*")
      super.addCorsMappings(registry)
    }
  }
}

参考:Spring Guide