2017-06-14 101 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);