我有以下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
我看到了有关此错误的一些答案,所有建议均使用
TypeReference
或TypeFactory
这里:
answer
和这里 :
another answer
我的问题是我使用的是杰克逊的旧版本(1.9.2),无法升级到2.0。
TypeReference
和TypeFactory
均已在2.0.0 API中添加。任何人都可以建议该怎么做?
最佳答案
这些类在Jackson 1.9中定义。相关文档TypeFactory和TypeReference
在这种情况下,非泛型类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);