У меня есть класс Java используется в Spring загрузки приложения для десериализации объекта JSON, идущий от запроса с поля, как так:Java-шаблон даты для десериализации даты с переменным числом дробных секунд?
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX", timezone = "UTC")
Instant timestamp;
Она использует аннотацию Джексон V2.6.6 @JsonFormat десериализации " timestamp "в JSON, входящем в сеть.
Что я вижу в том, что, когда значение что-то вроде:
"2017-01-09T21:49:26.70Z"
нет никаких проблем.
Однако, если значение имеет единственное число дробных второго знака после запятой включены, или более трех, как:
"2017-01-09T21:49:26.7Z" or "2017-01-09T21:49:26.7000Z"
Тогда я получаю следующее сообщение об ошибке:
Caused by: java.time.format.DateTimeParseException: Text '2017-01-09T21:49:26.7Z' could not be parsed at index 19
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) ~[?:1.8.0_65]
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777) ~[?:1.8.0_65]
at com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer.deserialize(InstantDeserializer.java:150) ~[jackson-datatype-jsr310-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer.deserialize(InstantDeserializer.java:45) ~[jackson-datatype-jsr310-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:520) ~[jackson-databind-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101) ~[jackson-databind-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:156) ~[jackson-module-afterburner-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736) ~[jackson-databind-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2764) ~[jackson-databind-2.6.6.jar:2.6.6]
Что могу ли я сделать, чтобы исправить этот шаблон, чтобы он мог быть гибким с точки зрения количества дробных вторых десятичных знаков, которые он принимает? Я понимаю, что в форматировании дат Java есть понятие мягкости: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
Но я не уверен, как настроить отображение объекта в режим снисхождения.
Если ничего не работает, вы можете прочитать его как 'String' и проанализировать его, используя регулярное выражение, возможно, – Caner