问题
在每次REST更新中,日期都会在给定日期前一天存储。
症状
当我PUT {'start': '2016-05-25', ...}
然后GET我得到{'start': '2016-05-24', ...}
。
当我PUT {'start': '2016-02-12', ...}
然后GET我得到{'start': '2016-02-11', ...}
。
它应该返回相同的日期。
应用程序
我有一个Java Spring Rest Controller,它接收JSON数据。
此对象在DTO类中表示:
public class TermDTO {
@JsonProperty("start")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd", timezone="Europe/Amsterdam")
private Date startDate;
}
然后将此DTO对象映射到某处的Entity对象:
public class TermEntity {
@Column(name="start_date")
@Temporal(TemporalType.DATE)
private Date startDate;
}
映射:
public TermEntity map(TermDTO termDto){
...
termEntity.setStartDate(termDto.getStartDate());
...
return termEntity;
}
稍后使用此定义将其保存到PostGreSQL数据库:
-- term table
CREATE TABLE term (
...
start_date DATE,
...
);
现在,奇怪的是这种行为只发生在服务器上,而不是发生在我的本地开发环境中。 这可能是由该服务器上的不同时区(UTC而不是欧洲/阿姆斯特丹)引起的。 我希望这与时区有关。也许我需要在整个过程中明确定义时区。 或者我应该使用其他Java日期类型? 我真的想在应用程序中而不是在服务器上设置它(设置它的时区)。
这似乎很难调试,因为它不会在我的机器上发生。 我希望你有一个建议。