问题描述
我正在努力解决 Java 和 Jackson 中的一些向后兼容性问题。
假设我们有以下界面:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.EXISTING_PROPERTY,property = "oldName")
@JsonSubTypes({
@JsonSubTypes.Type(value = Bar.class,name = Bar.TYPE_NAME),...
})
public interface FooType {}
一切正常,我可以反序列化和序列化 Bar。用于反序列化的 Bar JSON 包括一个类似 "oldName":"BarType"
的条目。然而,现在我们需要
将 "oldName"
重构为 "newName"
,这显然破坏了现有 JSON 文件的反序列化,因为无法再提取 typeInfo 并且我们得到预期的错误消息:missing type id property 'newName'
我们尝试了什么:
- 为财产寻找任何别名形式=> 没有成功:-(
- 使用 DeserializationProblemHandler 和覆盖:
@Override
public JavaType handleMissingTypeId(
DeserializationContext ctxt,JavaType baseType,TypeIdResolver idResolver,String failureMsg)
throws IOException
重构后,确实,在加载带有“oldName”的 JSON 时会调用该方法,并且我看到 baseType 是 FooType。但是,我们无法提取“oldName”属性并将其映射到“newName”。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)