Всем привет.
Отправляю через POST-запрос следующий JSON:
{
"name": "Дневная",
"startTime": {
"hour": 12,
"minute": 0,
"second": 0,
"nano": 000000000
},
"finishTime": {
"hour": 20,
"minute": 0,
"second": 0,
"nano": 000000000
},
"type": 1000000017
}
Валится со следующим стектрейсом:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalTime` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (PushbackInputStream); line: 4, column: 9] (through reference chain: ru.example.dto.ScheduleDto["startTime"])
Я так понимаю, Jackson не может десериализовать JSON в LocalTime. Подскажите, как решить проблему.
Зависимости какие надо есть:
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.2'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.2'
Там все просто. Добавляете эту зависимость
https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310
Потом при создании ObjectMapper регистрируете модуль так, как показано ниже, и будет вам счастье
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
Проблема была решена следующим образом.
Как и рекомендовал Дмитрий Александрович, я добавил зависимость. Потом добавил бин:
@Bean
public ObjectMapper jsonObjectMapper() {
return Jackson2ObjectMapperBuilder.json()
.modules(new JavaTimeModule())
.build();
}
Jackson стал сериализовать / десериализовать следующим образом:
"startTime": [
20,
0
],
почему-то отсекая всё, что меньше минуты, хотя, в сериалайзере прописано всё вплоть до nano:
package java.time.format:380
ISO_LOCAL_TIME = (new DateTimeFormatterBuilder()).appendValue(ChronoField.HOUR_OF_DAY, 2).appendLiteral(':').appendValue(ChronoField.MINUTE_OF_HOUR, 2).optionalStart().appendLiteral(':').appendValue(ChronoField.SECOND_OF_MINUTE, 2).optionalStart().appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true).toFormatter(ResolverStyle.STRICT, (Chronology)null);
Добавил JsonFormatter:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss")
private LocalTime startTime;
и стало принимать / выдавать следующее:
"startTime": "02:00:00",
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Делаю Android приложениеКакое, не особо важно
Пытаюсь запустить собранное приложение appjar из командной строки приблизительно такой командой: