Вам нужна только одна строка перед объявлением класса Animal
для корректной полиморфной сериализации/десериализации:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class Animal {
...
}
Это средство строки: добавьте метасвойство на сериализации или считайте метасвойство на десериализации (include = JsonTypeInfo.As.PROPERTY
) названный "@class" (property = "@class"
), который содержит полностью определенное имя класса Java (use = JsonTypeInfo.Id.CLASS
).
Так, если Вы создаете JSON непосредственно (без сериализации) не забывают добавлять метасвойство "@class" с желаемым именем класса для корректной десериализации.
[еще 119] информация здесь