Форматирование Jackson json для zoneddatetime

Мне нужно определить 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 символов.


person Gloria Santin    schedule 07.03.2019    source источник
comment
это не похоже на допустимый шаблон даты? должно ли это быть: 'yyyy M d k m s X' ... вы можете проверить свой формат по адресу: sdfonlinetester.info/#< /а>   -  person Milan    schedule 07.03.2019
comment
также имейте в виду, что при использовании часового пояса X (ISO 8601) ожидается значение в одном из следующих форматов: -08; -0800; -08:00.   -  person Milan    schedule 07.03.2019
comment
Этот шаблон даты/времени исходит из устаревшей системы. Я понимаю, что это не соответствует нормальному шаблону. Но мне было интересно, можем ли мы создать шаблон даты/времени, который может форматировать этот ввод.   -  person Gloria Santin    schedule 07.03.2019
comment
Возможно, лучшим способом было бы импортировать эту нетрадиционную дату/время в виде строки, а затем создать собственный метод синтаксического анализа для изменения даты/времени.   -  person Gloria Santin    schedule 07.03.2019
comment
Я согласен, что вы должны преобразовать свою устаревшую строку формата даты в действительную, прежде чем применять средство форматирования даты.   -  person Milan    schedule 07.03.2019
comment
Может ли XmlMapper этому? Или мне нужно сериализовать поле в строковый объект, а затем отформатировать его?   -  person Gloria Santin    schedule 07.03.2019
comment
Я бы сначала сериализовал в строку, в качестве альтернативы взгляните на создание собственного DateTimeFormatter.. извините, у меня нет примеров для этого   -  person Milan    schedule 07.03.2019
comment
Я пытаюсь это сделать. Должен ли я опубликовать его по этому вопросу, чтобы открыть другой ... потому что мне нужна помощь   -  person Gloria Santin    schedule 07.03.2019