Поддержка типа AliasFor
недоступна в Jackson. Но в качестве обходного пути мы можем изменить потребление метаданных, предоставленных аннотацией, добавив JacksonAnnotationIntrospector
.
То, что вы естьпопытка достичь может быть выполнена путем предоставления пользовательского JacksonAnnotationIntrospector
, который будет предоставлять реализацию по умолчанию из аннотации PolymorphismSupport
.
@Inherited
@JacksonAnnotationsInside
@Retention(RetentionPolicy.RUNTIME)
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public @interface PolymorphismSupport {
Class<?> defaultType() default Object.class;
}
public class CustomAnnotationIntrospector extends JacksonAnnotationIntrospector {
@Override
protected TypeResolverBuilder<?> _findTypeResolver(MapperConfig<?> config, Annotated ann, JavaType baseType) {
TypeResolverBuilder<?> b = super._findTypeResolver(config, ann, baseType);
PolymorphismSupport support = _findAnnotation(ann, PolymorphismSupport.class);
if (null != b && null != support) {
b.defaultImpl(support.defaultType());
}
return b;
}
}
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
setAnnotationIntrospector(new CustomAnnotationIntrospector());
}
}
Единственным недостатком этого подхода является то, что вам необходимо зарегистрировать интроспектор вобъект сопоставления при инициализации.