Джексон: InvalidFormatException: невозможно создать экземпляр java.util.Date из значения String - PullRequest
0 голосов
/ 30 октября 2018

Довольно просто, согласно документам.

Мое поле POJO выглядит так:

public class Message {
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    private Date _timestamp;

    public Date getTimestamp() {
        return _timestamp;
    }

    public void setTimestamp(Date timestamp) {
        this._timestamp = timestamp;
    }
}

Я пытаюсь сопоставить это с Джексоном так:

ObjectMapper mapper = new ObjectMapper();
Message message = mapper.readValue(message, Message.class);

Строка входящей даты выглядит следующим образом:

2018-10-30 12:44:34.270

Я получаю следующую ошибку:

com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String value '2018-10-30 12:44:34.270': not a valid representation (error: Failed to parse Date value '2018-10-30 12:44:34.270': Can not parse date "2018-10-30 12:44:34.270": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

Я пробовал следующее, но ошибка не меняется:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSSZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")

Не уверен, что еще я могу сделать. Я не могу изменить входящий формат, поэтому я должен жить с этим.

Заранее спасибо.

1 Ответ

0 голосов
/ 30 октября 2018

Проблема не в том месте, где вы ожидали:

Имя timestamp в вашем JSON-вводе

{ "timestamp": "2018-10-30 12:44:34.270" }

просто не соответствует имени _timestamp в вашем классе Java Message

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSS")
private Date _timestamp;

Есть несколько альтернативных способов сделать так, чтобы это соответствовало:

  • Во входных данных JSON измените "timestamp" на "_timestamp"
  • В коде Java измените Date _timestamp; на Date timestamp;
    (а также измените код с помощью вашего геттера и сеттера соответственно)
  • В коде Java добавьте аннотацию @JsonProperty("timestamp") к вашему Date _timestamp; определению
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...