Jackson:以编程方式确定亚型

dna*_*ult 5 java polymorphism json jackson

给定一个任意Class对象,确定向 Jackson 注册的该类的子类型的最佳方法是什么?

例如,这是一个简单的情况,其中类LionPenguin是 的子类型Animal

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({
        @JsonSubTypes.Type(Lion.class),
        @JsonSubTypes.Type(Penguin.class)})
public static abstract class Animal {}

@JsonTypeName("Lion")
public static class Lion extends Animal {}

@JsonTypeName("Penguin")
public static class Penguin extends Animal {}
Run Code Online (Sandbox Code Playgroud)

我梦想的功能如下:

List<Class> getSubTypeClasses(Class c) {...}
Run Code Online (Sandbox Code Playgroud)

getSubTypeClasses(Animal.class)会返回哪里LionPenguin.

如果 Jackson API 没有提供获取此信息的便捷方法,我将手动阅读注释,但最好了解与任何 AnnotationIntrospector实现兼容的技术。

小智 3

ai.findSubTypes(ac)可以使用mapper.getSubtypeResolver().collectAndResolveSubtypes(ac, config, ai). 我还没有使用注册的子类型对其进行测试,但查看了它应该起作用的代码。