Как говорит исключение, java.time.Duration
может быть создано только из int
, float
или string
, но вы предоставляете объект Json.
Определите свой класс продолжительности как
public class Duration {
private long seconds;
private long nano;
private List<String> units;
// setters / getters
}
Теперь ваш запрос будет сопоставлен с классом A
Редактировать 1
Если вы все еще хотите отобразить на java.time.Duration
, вам нужно изменить тело запроса.
Дело 1 (int)
Случай 2 (с плавающей точкой)
Случай 3 (строка)
Для всех вышеперечисленных трех случаев добавьте зависимость
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.8</version>
</dependency>
Класс A следует изменить как
public class A {
private Duration availTime;
// for json output of duration as string
@JsonFormat(shape = Shape.STRING)
public Duration getAvailTime() {
return availTime;
}
public void setAvailTime(Duration availTime) {
this.availTime = availTime;
}
}
Распечатать тело запроса как json
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
System.out.println(mapper.writeValueAsString(ta));
Если вы все еще хотите отобразить существующее тело запроса, вам нужно написать собственный десериализатор для класса Duration.
Надеюсь, это поможет.