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 应用程序中将日期更改为一天。的主要内容,如果未能解决你的问题,请参考以下文章
Jackson 在我的 Spring Boot 应用程序中忽略了 spring.jackson.properties
Spring boot + Jackson - 始终将日期转换为 UTC