1

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

4

2 回答 2

4

通过添加 @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;
    }
于 2019-02-28T23:18:01.330 回答
0

正如CRASP所说,启用@EnableWebMvc将关闭 Spring Boot 中的默认设置。这是我在不使用@EnableWebMvc注释的情况下配置 CORS 的方法:

@Configuration
class CorsConfig {

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

参考:弹簧指南

于 2020-11-06T12:54:29.590 回答