Джексон меняет дату во время десериализации - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть такой объект даты:

@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.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вам необходимо настроить часовой пояс на вашем ObjectMapper:

    val mapper = ObjectMapper().apply {
        setTimeZone(TimeZone.getDefault())
    }
0 голосов
/ 30 ноября 2018

Учитывая, что обсуждение и ответы показали, что Java 8 LocalDate решит проблему, но это не вариант для вас, учитывая, что ваш минимальный уровень API равен 21, альтернативное решение - joda-time .

Предоставляет класс LocalDateTime, который не содержит информации о часовом поясе.Его можно интегрировать с Джексоном с помощью модуля jackson-datatype-joda .Вам нужно будет зарегистрировать модуль так:

val objectMapper = ObjectMapper().apply { 
      registerModule(JodaModule())
}
0 голосов
/ 30 ноября 2018

Я предлагаю вам использовать LocalDate вместо Date.Это дата без часового пояса, поэтому вы можете избежать любых проблем с часовым поясом.

Для правильной (де) сериализации LocalDate вам необходима дополнительная зависимость для Джексона:

implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.5")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...