Я пытаюсь десериализовать дату форматирования ISO8601 в Java8 Instant, используя Jackson. Я зарегистрировал JavaTimeModule с ObjectMapper, отключил WRITE_DATES_AS_TIMESTAMPS.
Однако, если вы попытаетесь десериализовать 2016-03-28T19: 00: 00.000 + 01: 00, это не сработает, потому что кажется, что JavaTimeModule будет десериализовать дату-время, отформатированное с учетом смещения часовой пояс UTC (например, 2016-03- 28T18: 00: 00.000Z). Затем я попытался использовать аннотацию @JsonFormat следующим образом:
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")
И вот так:
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = JsonFormat.DEFAULT_TIMEZONE)
Однако ни одна из этих функций не работает, и я получаю исключение:
com.fasterxml.jackson.databind.JsonMappingException: Unsupported field: YearOfEra (through reference chain: org.example.Article["date"])
Это означает, что параметр часового пояса игнорируется, а формат времени даты не знает, как форматировать Instant без часового пояса.
Есть ли способ десериализовать строку ISO8601, которая не относится к смещению часовой пояс UTC к Java 8 Мгновенно, используя Jackson и JavaTimeModule без написания пользовательского десериализатора?