我有一个类似这样的日期对象:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
@get:JsonProperty("date") val date: Date
问题是,当我的应用程序将此日期对象设置为Fri Nov 30 00:00:00 CET 2018
时,杰克逊将在反序列化期间将此日期设置为2018-11-29
。有人可以提示我问题所在吗?
我的最低API级别是21。
答案 0 :(得分:1)
我建议您使用LocalDate
而不是Date
。这是一个没有时区的日期,因此可以避免任何时区问题。
要对LocalDate
进行正确的(反)序列化,您需要对Jackson附加依赖:
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.5")
答案 1 :(得分:1)
鉴于讨论和回答表明Java 8 LocalDate将解决此问题,但是鉴于您的最低API级别为21,因此这不是您的选择,替代解决方案是joda-time。
它提供了一个LocalDateTime
类,其中不包含任何时区信息。可以使用jackson-datatype-joda模块将其与jackson集成。您将必须像这样注册模块:
val objectMapper = ObjectMapper().apply {
registerModule(JodaModule())
}
答案 2 :(得分:0)
您需要在ObjectMapper上配置时区:
val mapper = ObjectMapper().apply {
setTimeZone(TimeZone.getDefault())
}