2017-06-14 79 views
1

反序列化通用对象,我有以下3类:错误通过杰克逊

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

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

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

当反序列化thew类之一(1类或类2)我得到以下错误:

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

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

我的问题是,我使用杰克逊旧版本(1.9.2),不能移动到2.0。在2.0.0 API中添加了TypeReferenceTypeFactory

任何人都可以建议做什么?

+0

这样的版本1.19似乎并不存在。你的意思是1.9.1吗? –

+0

是的 - 抱歉 - 1.9.2 – user1386966

回答

0

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

你在这里延伸出的通用与类型BaseClass<BasePerson>非通用类Class1的情况。这是我如何相信你会用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);