我有以下3个班级:
public class BaseClass<T>{
private List<T> someList;
... constructor.....
}
public class Class1 extends BaseClass<BasePerson>{ .. constructor.. }
public class Class2 extends BaseClass<Person> { ... constructor... }
当反序列化其中一个类(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。 {2.0} API中都添加了TypeReference
和TypeFactory
。
任何人都可以建议做什么?
答案 0 :(得分:0)
这些类在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);