Можно ли использовать @JsonTypeInfo.As.EXTERNAL_PROPERTY
без необходимости указывать подтипы с помощью @JsonSubtypes
?
Вариант использования: я хочу создать общие базовые классы, которые имеют различные тела, которые объявленыв других проектах.
Общий базовый класс, который содержит общие поля и тело
public class ApiModel<T extends ApiBodyModel> {
private String modelType;
private String version;
private T body;
... getters / setters
}
Абстрактная модель тела, которая имеет дополнительный общий контекст внутри.
@JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, property = "modelType")
//@JsonTypeIdResolver(InheritanceTypeIdResolver.class)
public abstract class ApiBodyModel<T extends ApiBodyModel<T>> {
@JsonProperty
private ApiContextModel context;
public T withContext(ApiContextModel context) {
this.context = context;
return (T) this;
}
... getters / setters
}
Одним из решений, которое позволило мне отказаться от использования @JsonSubTypes
, было использование Reflection для получения всех подтипов абстрактного ApiBodyModel
, детализированного на https://gist.github.com/root-talis/36355f227ff5bb7a057ff7ad842d37a3,, нопо-прежнему требовалось, чтобы имя класса было объявлено внутри тела, а не на один уровень выше.
Примеры, найденные для использования @JsonTypeInfo.As.EXTERNAL_PROPERTY
, объявили JsonSubTypes
, но я хочу избежать этого, так как абстрактный класс будет вобщий проект.