如何解决Java多态Json反序列化
我在项目(Spring Java)中使用杰克逊作为序列化和反序列化的一部分。
在正常情况下,我有接口(合同)充当POJO中的字段,
然后我使用@JsonTypeInfo
和@JsonSubTypes
在多态情况下实现反序列化。
但是,现在,我有类似这样的场景:
public class classA {
private contractA fieldA;
//constructor and getter-setters.
}
然后
public interface contractA {
}
最后
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(/* concrete-class1 as name-value */),@JsonSubTypes.Type(/* concrete-class2 as name-value */),})
public interface contractB extends contractA {
//contract methods.
}
现在,当classA
作为控制器请求主体传递并且我将fieldA
作为concrete-class1
或concrete-class2
传递时,
杰克逊没有使用JsonSubTypes
来反序列化为其中之一。
我这样做并拥有两个合同的原因是由于软件包的依赖性。 contractB
与contractA
的包装不同。
如何使用杰克逊在contractA
上配置该类在其子类中指定了其JsonSubTypeInfo
。
或者,也欢迎使用任何其他库或方法。
谢谢!
解决方法
稍后通过引入我们自己的客户JsonTypeInfo
解决此问题。
在部署应用程序时,我们获取JsonTypeInfo
批注(类似于自定义注释的杰克逊)中存在的所有子类,并维护一个数据结构,该结构将在serializing
和{ {1}}。此过程与deserializing
相似(除了查找嵌套层次结构之外)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。