Мне нужно определить JsonFormat для ZonedDateTime, в котором время определяется в сообщении xml.
Я добавил банку Джексона для форматирования ZonedDateTime (com.fasterxml.jackson.datatype.jsr310.JavaTimeModule)
Добавлен JavaTimeModule следующим образом:
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(new JavaTimeModule());
xmlMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Проблема в том, что он не может правильно отформатировать дату и время. Ошибка:
com.fasterxml.jackson.databind.exc.InvalidFormatException: невозможно десериализовать значение типа
java.time.ZonedDateTime
из строки «2019 3 4 14 44 20 -5»: текст «2019 3 4 14 44 20 -5» не может быть проанализирован по индексу 18
Вот как я определяю шаблон времени:
@JsonFormat(pattern = "yyyy M e k m s X")
private ZonedDateTime openDtGmt;
Как я могу сопоставить шаблон зоны, если в строке есть отрицательный результат?
ОБНОВЛЕНИЕ Я понимаю, что дата не соответствует общепринятым правилам. Но это происходит из устаревшей системы и не может быть изменено. Нам нужно определить шаблон даты/времени следующим образом: 4-значный год; все остальные цифры НЕ имеют начальных нулей; затем часовой пояс без начальных нулей и знака перед цифрой. Кроме того, часовой пояс — время по Гринвичу. Формат часового пояса — UTC.
Мы заменили XmlMapper на ObjectMapper. Кажется, это избавляет нас от ошибки формата даты/времени, но в XML есть пустой тег, в котором он терпит неудачу. Если мы сможем обойти ошибку пустого тега, мы сможем проанализировать дату/время с помощью нашего собственного метода.
ОБНОВЛЕНИЕ После дополнительного тестирования кажется, что ошибка, которую мы получаем при использовании ObjectMapper, связана с пустым тегом. Кажется, что строка xml слишком длинная. Ошибки при длине 1000 символов.