我有以下 3 个类(class):
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
我的问题是我使用的是 Jackson 旧版本 (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);
关于java - 通过 Jackson 反序列化通用对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44543091/