gpt4 book ai didi

java - 通过 Jackson 反序列化通用对象时出错

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:23 24 4
gpt4 key购买 nike

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

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

我的问题是我使用的是 Jackson 旧版本 (1.9.2),无法升级到 2.0。 TypeReferenceTypeFactory 都是在 2.0.0 API 中添加的。

有人可以建议该怎么做吗?

最佳答案

这些类在 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);

关于java - 通过 Jackson 反序列化通用对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44543091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com