gpt4 book ai didi

java - Jackson:反序列化为不同类型

转载 作者:行者123 更新时间:2023-12-01 17:35:02 25 4
gpt4 key购买 nike

我知道类似的问题已经存在( Jackson - Deserializing to a Different Type ),但那里的答案对我没有帮助。旧的 JSON 文件已在生产中,无法更改。

我有一个使用旧 POJO 的常规应用程序。现在我有了新的 POJO,并且当前为了支持旧文件,我正在反序列化到旧 POJO 并手动转换为新文件。我想将转换直接写入 jackson 解串器,但我遇到了麻烦。过去我写过一个简单的 Jackson 模块来序列化和反序列化某些类型,并且我对 Jackson 有一些基本的了解。

我有类似的东西:

public class MyModule extends com.fasterxml.jackson.databind.module.SimpleModule

public MyModule() {
super("MyModule", Version.unknownVersion());

addDeserializer(OldPojo.class, new JsonDeserializer<NewPojo>() {
@Override
public NewPojo deserialize(JsonParser p, DeserializationContext ctxt) {
// convert and return new pojo
}
}

// others deserializers ...
}
}

这种方法可行吗?我做错了什么?非常感谢。

最佳答案

documentation for `SimpleModule.addDeserializer()给出该方法的签名,如下所示:

public <T> SimpleModule addDeserializer(Class<T> type, JsonDeserializer<? extends T> deser)

哪里<T>JsonDeserializer.deserialize() 的返回类型(好吧,<? extends T> 就是这种类型……)。

因此,在您的情况下,您必须能够输入 NewPojo实例到OldPojo引用:

NewPojo o = new NewPojo();
OldPojo r = (OldPojo) o;

如果没有 ClassCastException 也能正常工作,你的方法可能会成功……

您说您无法更改 JSON 文件 - 但您是否必须保留 OldPojo类也?为什么会这样


addDeserializer( **NewPojo.class**, new JsonDeserializer<NewPojo>() )
{

不适合你吗?

关于java - Jackson:反序列化为不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056406/

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