Я пытаюсь десериализовать дату форматирования ISO8601 в Java8 Мгновенно используя Джексон. Я зарегистрировал JavaTimeModule с ObjectMapper, отключил WRITE_DATES_AS_TIMESTAMPS.Jackson deserialize ISO8601 fromatted date-time в Java8 Instant
Однако, если вы попытаетесь десериализовать 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 без написания пользовательского десериализатора?
странно, я ожидал эту ошибку 'Не удалось разобрать значение 'Дата 2016-03-28T19: 00: 00,000 + 01: 00' (формат:«YYYY-MM-dd'T «HH: mm: ss.SSSZ»): Невозможная дата: «2016-03-28T19: 00: 00.000 + 01: 00» «и после попытки вашего кода я получил такую ошибку в обоих случаях. Формат не соответствует ... вы пробовали его без каких-либо аннотаций? –
или с этим рисунком: yyyy-MM-dd'T'HH: mm: ss.SSSXXX (см. Https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) –
Без каких-либо аннотаций он работает, но только если смещение указано как Z. Оно не будет работать для +0100 или +01: 00. Я попробовал ваш формат, и я все равно получаю поле Unsupported: исключение YearOfEra, указывающее, что форматировщик десериализатора не настроен с часовым поясом (по какой-то причине java 8 fromatter требует TZ, даже если смещение указано в строке, а Instant полностью определено) , –