Я пытаюсь опубликовать объект
{
"id": "SOME_ID",
"foo": "http://localhost:8080/api/subclass-of-foo/OBJECT_ID"
}
Класс Foo
является абстрактным. Информация о конкретном классе находится по ссылке subclass-of-foo
. Но я всегда получаю «Невозможно создать экземпляр Foo
(не существует создателей, таких как конструкция по умолчанию): абстрактные типы либо должны быть сопоставлены с конкретными типами, иметь настраиваемый десериализатор или содержать дополнительную информацию о типе».
Я не могу использовать @JsonDeserialize(as = Subclass.class)
в Foo
, так как существует несколько подклассов Foo
.
Где и как я могу предоставить эту информацию для решения проблемы?
@Entity
@Inheritance(strategy = SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = STRING)
class abstract Foo {
private id;
}
class Bar1 extends Foo {
}
class Bar2 extends Foo {
}
class Bar3 extends Foo {
}
@Entity
class X {
private String id;
@OneToOne
private Foo foo;
}
И полезная нагрузка json для POST объекта X:
{
"id": "X_ID",
"foo": "http://localhost:8080/api/bar1/Bar1_ID"
}
Foo
должен быть @MappedSuperclass. Проверьте здесь baeldung.com/hibernate-inheritance - person Sebastian Ullrich   schedule 21.05.2019