У меня есть класс, который содержит два члена LocalDateTime:
public class Foo
{
private final LocalDateTime start;
private final LocalDateTime end;
public Foo(LocalDateTime start, LocalDateTime end)
{
this.start = start;
this.end = end;
}
}
У меня есть контроллер Spring Boot для обработки запроса POST:
@PostMapping(value = "/my-resource")
public ResponseEntity<?> bar(@RequestBody Foo foo)
{
return ResponseEntity.ok().build();
}
Если я отправлю запрос POST следующим образом:
curl -X POST \
http://localhost:8080/my-resource \
-H 'Content-Type: application/json' \
-d '{
"start":[2016, 1, 1, 10, 24],
"end":[2016, 1, 1, 10, 24]
}
'
возвращается следующая ошибка:
"message": "Type definition error: [simple type, class Foo]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `Foo` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)\n at [Source: (PushbackInputStream); line: 2, column: 2]"
После некоторых копаний я добавил ctor по умолчанию в Foo, и это устранило ошибку. Я также должен был удалить final
из участников.
Я не понимаю, почему это решение работает. Может кто-нибудь объяснить это?