java - 在 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
解决方案
通过添加 @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;
}
推荐阅读
- puppet - Puppet 无法获取 gpg 密钥
- sql-server - 为多个表创建外键约束
- c# - 在 C# 中使用 HtmlAgilityPack 解析站点
- ruby-on-rails - 为什么 Capistrano 部署在 assets:precompile 没有错误时失败?
- ruby - 如何在 Sinatra 控制器中使用参数
- javascript - javascript获取错误的地址
- android - 文本 BackgroundColor 的边框单选
- javascript - 使用lodash在javascript中省略一个或多个值
- c# - Youtube API V3 搜索文本并获取特定详细信息,例如 Id、视图和片段图像 url
- jquery - 输入类型=“数字”的值总是在鼠标滚轮上关闭