gpt4 book ai didi

java - Jackson 在将抽象类型映射到具体类型时放弃类型绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 07:18:49 24 4
gpt4 key购买 nike

我的问题就像“Jackson and generic type reference ”,但由于我的泛型类是抽象的,所以我必须将其映射到具体类型。这曾经在 Jackson v2.5.3 下工作得很好,但 Jackson(v2.7.2 或更早版本)最近的变化已经破坏了它。

我有抽象类 Page 和具体类 PageImpl。我以前可以将Page反序列化为PageImpl,没问题:

SimpleModule module = new SimpleModule().addAbstractTypeMapping(Page.class, PageImpl.class)
ObjectMapper objectMapper = new ObjectMapper().registerModule(module);

但是现在,我通过调试源代码了解到,当 Jackson 将抽象类型映射到具体类型时,它会删除类型绑定(bind)。这意味着如果我告诉 Jackson 将给定的 JSON 字符串解析为 Page< XYZ >...

类型
value = objectMapper.readValue(json,
typeFactory.constructSimpleType(Page.class,
new JavaType[]{typeFactory.constructSimpleType(XYZ.class, null)}));

...它将输出类型映射到 PageImpl,但它会在将 JSON 反序列化到 PageImpl 之前删除类型绑定(bind)。这会导致 PageImpl POJO 包含 LinkedHashMap 对象列表,而不是 XYZ 对象列表。

我不知道为什么 jackson 会变成这样;这似乎是一个错误。寻找有关解决方法的建议。谢谢!

最佳答案

尝试 2.7.5:由于类型解析重写而出现了一些问题,虽然大多数问题已在 2.7.3 中修复,但 2.7.4 中又出现了一个问题。所以很可能您确实遇到了错误。

一般来说,尝试一下您所拥有的次要版本的最新补丁版本是个好主意:此时没有充分的理由使用 2.7.2,而不是 2.7.5。

关于java - Jackson 在将抽象类型映射到具体类型时放弃类型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948425/

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