Мы сталкиваемся со странным поведением при сериализации дат с Джексоном.
Это происходит очень редко.
В одном примере мы отправляем запрос POST с сериализованной датой в формате:
public static String createUTCdateString() {
//Time in GMT
SimpleDateFormat simpleDateFormatUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
simpleDateFormatUTC.setTimeZone(TimeZone.getTimeZone("UTC"));
return simpleDateFormatUTC.format(new Date());
}
Мы сделали 2 сообщения с разницей в 2 мс, в журналах я вижу, что даты сериализуются как:
"2019-02-25T08:02:47.950Z"
"2019-02-25T08:02:47.952Z"
при получении дата десериализуется в DTO с неверной датой.
2-е событие имеет дату 4701 вместо 2019.
date=Mon Feb 25 08:02:47 UTC 2019,
date=Mon Feb 25 08:02:47 UTC 4701,
Поле в DTO выглядит следующим образом:
@NotNull
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date date;
Почему это случилось?
Странно, я не смог найти ничего, связанного с этим. Любая помощь приветствуется.
РЕДАКТИРОВАТЬ:
Компонент сериализации имеет Vertx 3.5.1
, используя Jackson 2.9.3
, очевидно.
https://github.com/vert-x3/wiki/wiki/3.5.1-Release-Notes
Компонент десериализации - Spring Boot с использованием Jackson 2.8.x