通过jackson

时间:2017-06-14 11:09:35

标签: java generics serialization jackson deserialization

我有以下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

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

我的问题是我使用的是杰克逊旧版本(1.9.2)并且无法移动到2.0。 {2.0} API中都添加了TypeReferenceTypeFactory

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

1 个答案:

答案 0 :(得分:0)

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

这里有非泛型类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);