Джексон не может десериализовать свидание - PullRequest
0 голосов
/ 13 марта 2019

В своем приложении я добавил REST.Чтобы проверить эти методы, я создал несколько базовых строк в своей базе данных.

Когда я пытаюсь использовать GET с идентификатором для получения конкретной строки в моей базе данных, я получаю исключение Джексона.

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2019-03-11T10:14:14Z[UTC]": not a valid representation (error: Failed to parse Date value '2019-03-11T10:14:14Z[UTC]': Cannot parse date "2019-03-11T10:14:14Z[UTC]": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null))

Мой объект, который я пытаюсь создать, имеет поле

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date published;

И вызываемый конструктор имеет вид

public something(Date published) {
    this.published = published;
}

Я прочитал в вопросе StackOverflow, я должен добавить

@JsonType(pattern="")

над полем «Опубликован», но я не могу найти то, что мне нужно импортировать, чтобы эта аннотация работала.

РЕДАКТИРОВАТЬ: Благодаря ответу ШАХАКАШа мне удалось добавитьаннотация в конце концов.

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = TimeZone.getDefault(), locale = Locale.getDefault())

Однако у меня есть две проблемы с этим, во-первых, это не позволит мне сохранить часовой пояс и локаль.Поэтому удаление этих файлов позволяет моей программе запускаться

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")

, что приводит к ошибке:

Cannot deserialize value of type `java.util.Date` from String "2019-03-11T10:14:14Z[UTC]": expected format "yyyy-MM-dd'T'HH:mm:ss.SSS"

Очевидно, это означает, что мой формат неверен.У меня много проблем, чтобы найти правильный формат моей даты.

1 Ответ

0 голосов
/ 13 марта 2019

попробуйте этот шаблон yyyy-MM-dd'T'HH:mm:ss'Z'

String testDate = "2019-03-11T10:14:14Z[UTC]";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = sdf.parse(testDate);
System.out.println(d);

Вывод:

Mon Mar 11 10:14:14 IST 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...