我有以下3个课程:

public class BaseClass<T>{
   private List<T> someList;
   ... constructor.....
}

public class Class1 extends BaseClass<BasePerson>{ .. constructor.. }

public class Class2 extends BaseClass<Person> { ... constructor... }


反序列化w类之一(Class1或Class2)时,出现以下错误:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.somepackage.BasePerson


我看到了有关此错误的一些答案,所有建议均使用TypeReferenceTypeFactory
这里:
answer
和这里 :
another answer

我的问题是我使用的是杰克逊的旧版本(1.9.2),无法升级到2.0。 TypeReferenceTypeFactory均已在2.0.0 API中添加。

任何人都可以建议该怎么做?

最佳答案

这些类在Jackson 1.9中定义。相关文档TypeFactoryTypeReference

在这种情况下,非泛型类Class1扩展了类型为BaseClass<BasePerson>的泛型。我相信这就是您使用TypeFactory处理此问题的方式

ObjectMapper mapper = new ObjectMapper();
TypeFactory typeFactory = mapper.getTypeFactory();
JavaType baseType = typeFactory.constructParametricType(BaseClass.class, BasePerson.class);
JavaType type = typeFactory.constructSpecializedType(baseType, Class1.class);


然后像这样反序列化:

Class1 class1 = mapper.readValue(json, type);

10-08 00:37