Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。

Posted

技术标签:

【中文标题】Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。【英文标题】:Jackson is changing date to one day old in spring boot rest application. 【发布时间】:2017-08-13 09:13:54 【问题描述】:

我用 spring boot 1.5.2 创建了一个简单的应用程序。我正在传递日期,并且已经在 application.properties 文件中提到了日期格式,如下所示: spring.jackson.joda-date-time-format=yyyy-MM-dd

但是,当使用任何客户端为 POST(Insert) 或 PUT(Update) 调用其余服务时,日期将更改为当天。示例 2017-03-21 将更改为 2017-03-20。

【问题讨论】:

你是如何映射实体日期属性的?它们是什么类型的?您使用的是@Type 吗?信息太少,无法帮助您。 服务器和客户端是否在同一个时区? 这是一个时区问题。 Jackson 将您的日期(默认为本地时区)转换为另一个时区。我发现解决此问题的唯一方法是将 ZonedDateTime 设置为 UTC。 您好 Sundararj,是的,服务器和客户端位于同一时区。 你好 Guillaume,我如何将时区更改为 UTC 我试图通过更改 application.property 文件中的以下属性来修复它:spring.jackson.deserialization.adjust-dates-to-context-time- zone=false 【参考方案1】:

我遇到了同样的问题,我以这种方式解决了它: 在您的实体中,添加这些注释:

@Temporal(TemporalType.DATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, locale = "fr-FR", timezone = "Europe/Paris")
private Date yourDate;

或者您可以将这些行添加到 application.properties 文件中:

spring.jackson.time-zone=Europe/Paris
spring.jackson.locale=fr_FR

如果您在另一个国家/地区,您可以更改语言环境和时区,但即使您保留法国,也可以。

【讨论】:

以上是关于Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 使用啥版本的 Jackson?

Jackson 在我的 Spring Boot 应用程序中忽略了 spring.jackson.properties

Spring boot + Jackson - 始终将日期转换为 UTC

spring-boot用jackson改变json响应结构

在 Spring Boot 中使用 Jackson 反序列化 Date 对象

Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。