Я также использую Jackson для полиморфной десериализации с использованием @JsonSubTypes.
Пример настройки:
Код: Выделить всё
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),
@JsonSubTypes.Type(value = Cat.class, name = "Cat")
})
public interface Animal {
String getName();
}
@Getter
@Setter
public class Dog implements Animal {
private String name;
}
@Getter
@Setter
public class Cat implements Animal {
private String name;
}
@Getter
@Setter
public class Zoo {
private Animal animal;
}
Код: Выделить всё
@RestController
public class ZooController {
@PostMapping("/zoo")
public void createZoo(@RequestBody Zoo zoo) {
System.out.println(zoo.getAnimal().getName());
}
}
И если я попытаюсь вызвать конечную точку /zoo с этим телом запроса:
Код: Выделить всё
{
"animal": {
"@type": "Dog",
"name": "dog_name"
}
}
Вызвано:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: невозможно
создать экземпляр com.example.model.Dog: невозможно десериализовать из
значения объекта (без делегата или свойства Creator): похоже, что
это собственный образ, и в этом случае вам может потребоваться настроить отражение
для класса, который необходимо десериализовать
Вопрос:
Можно ли настроить плагин org.graalvm.buildtools.native для автоматического добавления Реализации @JsonSubTypes для отражения-config.json?
Или мне действительно следует вручную добавлять каждый подтип в размышление-config.json (или через RuntimeHintsRegistrar)?
Подробнее здесь: https://stackoverflow.com/questions/797 ... pes-implem
Мобильная версия