【发布时间】:2020-04-06 09:11:44
【问题描述】:
我知道已经存在类似的问题 (Jackson - Deserializing to a Different Type),但那里的答案对我没有帮助。旧的 JSON 文件已投入生产,无法更改。
我有一个使用旧 POJO 的常规应用程序。现在我有了新的 POJO,目前为了支持旧文件,我将反序列化为旧的 POJO 并手动转换为新的。我想将转换直接写入杰克逊反序列化器,但我遇到了麻烦。过去我写过一个简单的 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 ...
}
}
这种方法可行吗?我做错了什么?非常感谢。
【问题讨论】:
-
OldPojo和NewPojo有什么区别?Old JSON payload和New JSON payload有什么区别? -
许多不同之处。例如,一些引文 POJO 现在可能有多个作者,而不是以前是一个字符串的单个作者。新的 POJO 也可能具有或多或少的属性或使用新的 3rd 方库作为本地日期。
-
它会起作用的。你得到什么类型的错误?
-
我终于搞定了!我刚刚为主要的 POJO 创建了一些反序列化器,并从那里处理了 JsonNode。我跟着stackoverflow.com/questions/18313323/… 的第二个回答。一个问题是对新的 POJO 使用原始序列化程序,而我刚刚制作了一个原始映射器。我想学习如何改用默认的序列化程序。解决方法:github.com/SiLeBAT/FSK-Lab/blob/emf_jackson/…
标签: java json jackson jackson-databind