Java-Jackson:以编程方式确定子类型

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

例如,这是一个简单的情况,其中Lion和Penguin类是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 {}

我的梦想函数如下所示:

List<Class> getSubTypeClasses(Class c) {...}

其中getSubTypeClasses(Animal.class)将返回Lion和Penguin.

如果Jackson的API没有提供获取此信息的便捷方法,我将手动阅读注释,但是很高兴知道与任何AnnotationIntrospector实现兼容的技术.

解决方法:

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

上一篇:js中JSON.stringify用于自定义的类


下一篇:java-Jackson继承和反序列化