Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
08.12.2020, 00:09
|
|||
---|---|---|---|
|
|||
Rest Controller как вернуть дату с timeZone |
|||
#18+
Добрый вечер. Помогите, пожалуйста, разобраться с датами: У меня есть довольно простой контроллер Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И простой класс Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Когда я пытаюсь вызвать контроллер и передать ему дату в формате 2020-12-07T19:54:25.860+0100, я получаю в логе дату с timeZone UTC. И метод post мне тоже возвращает UTC, а мне надо вернуть дату ровно в том формате и виде, который у меня пришел (с +0100) Мне подсказали, что надо заменить Date на OffsetDateTime, но когда я переписал класс TimeTestRq c date на OffsetDateTime, я стал получать ошибку nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.OffsetDateTime` from String "2020-12-07T19:54:25.860+0100": Failed to deserialize java.time.OffsetDateTime: (java.time.format.DateTimeParseException) Text '2020-12-07T19:54:25.860+0100' could not be parsed, unparsed text found at index 26 Как можно это исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.12.2020, 01:52
|
|||
---|---|---|---|
|
|||
Rest Controller как вернуть дату с timeZone |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.12.2020, 01:59
|
|||
---|---|---|---|
|
|||
Rest Controller как вернуть дату с timeZone |
|||
#18+
Timein Когда я пытаюсь вызвать контроллер и передать ему дату в формате 2020-12-07T19:54:25.860+0100, я получаю в логе дату с timeZone UTC. И метод post мне тоже возвращает UTC, а мне надо вернуть дату ровно в том формате и виде, который у меня пришел (с +0100) Мне подсказали, что надо заменить Date на OffsetDateTime, но когда я переписал класс TimeTestRq c date на OffsetDateTime, я стал получать ошибку nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.OffsetDateTime` from String "2020-12-07T19:54:25.860+0100": Failed to deserialize java.time.OffsetDateTime: (java.time.format.DateTimeParseException) Text '2020-12-07T19:54:25.860+0100' could not be parsed, unparsed text found at index 26 Как можно это исправить? Добро пожаловать в чудный мир передачи ISO8601 по REST. Если посмотреть как jackson определяет десериализатор для OffsetDateTime, то там будет так: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Вот этот вот DateTimeFormatter.ISO_OFFSET_DATE_TIME хочет чтобы в смещении часы, минуты (и секунды) были разделены двоеточием: Код: java 1.
Строго говоря они правы, а вам время передают в неправильном формате: согласно ISO8601 формат может быть либо basic (без разделителей вообще), либо extended (со всеми разделителями), а у вас получается mixed: в дате и времени разделители есть (- и :), а в смещении уже нет. Собственно если на клиенте нет возможности исправить поведение, то нужно описывать собственный формат, парсер для него и десериализатор. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.12.2020, 10:21
|
|||
---|---|---|---|
|
|||
Rest Controller как вернуть дату с timeZone |
|||
#18+
Leonid Kudryavtsev, не очень понял, что именно надо смотреть Андрей Панфилов,Андрей ПанфиловСтрого говоря они правы, а вам время передают в неправильном формате: согласно ISO8601 формат может быть либо basic (без разделителей вообще), либо extended (со всеми разделителями), а у вас получается mixed: в дате и времени разделители есть (- и :), а в смещении уже нет. То есть строка должна быть вида: 2020-12-07T19:54:25.860+01:00? Поменял Date date на OffsetDateTime offsetDateTime И в конроллере time.setOffsetDateTime(timeTest.getOffsetDateTime()); Ошибка пропала, но в выводе я получаю UTC и вместо зоны Z 2020-12-07T18:54:25.860Z ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.12.2020, 10:35
|
|||
---|---|---|---|
|
|||
Rest Controller как вернуть дату с timeZone |
|||
#18+
Timein, Rest это API. Или попросту говоря это методы с параметрами. Поэтому как договоритесь, так дату и передавайте. Это специфический тип. Если клиент учебное заведение, то rest передает так как написано в расписании 12:21. Ну или можете несколько форматов сразу передать. Как строку, с таймзоной и без нее. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=59&tablet=1&tid=2120584]: |
0ms |
get settings: |
7ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
49ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
169ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 543ms |
0 / 0 |