Собственный образ GraalVM: почему плагин Spring Native не добавляет реализации @JsonSubTypes вreflect-config?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Собственный образ GraalVM: почему плагин Spring Native не добавляет реализации @JsonSubTypes вreflect-config?

Сообщение Anonymous »

Я использую Spring Boot 3.5.3 с собственным образом GraalVM через плагин «org.graalvm.buildtools.native» версии «0.11.1».
Я также использую 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;
}
И простой контроллер Spring REST:

Код: Выделить всё

@RestController
public class ZooController {
@PostMapping("/zoo")
public void createZoo(@RequestBody Zoo zoo) {
System.out.println(zoo.getAnimal().getName());
}
}
Когда я создаю собственный образ с помощью Gradle Clean NativeCompile, я вижу, что подтипы Dog и Cat не включены в build/generated/aotResources/META-INF/native-image/project-path/reflect-config.json, тогда как Zoo и Animal включены.
И если я попытаюсь вызвать конечную точку /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»