java - java中使用jackson进行继承反序列化

标签 java jackson jackson-databind

我有 3 个名为 CreditAccount、Savings Account 和 ChequingAccount 的子类,它们扩展了一个名为 Account 的父类(super class)。

我试图将所有用户及其各自的帐户详细信息保存在 HashMap 中,如下所示:

public HashMap<Long, HashMap<String, Account>> userAndHisAccountsObject;

其中 HashMap 以 UserID 作为键,以 HashMap 对象作为其值,该对象包含 AccountType 作为键,并且各自的帐户详细信息其值。 我成功地序列化了这个对象,但是当我尝试反序列化它时,它抛出 com.fasterxml.jackson.databind.exc.InvalidTypeIdException

我可以解决我的问题吗? 提前致谢。

最佳答案

@hollpolloi 的评论中确实提供了答案,链接为:https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

当您使用继承和 Jackson 时,您需要一种方法来告诉 Jackson 如何区分不同的 JSON,以及如何确定每个 JSON 属于哪种对象类型(类)。 问题是,当没有属性告诉 Jackson 应该使用哪个类时,Jackson 可能会与类似的 JSON 有效负载混淆

另一个很好的引用问答是:Deserialize JSON with Jackson into Polymorphic Types - A Complete Example is giving me a compile error

一个非常简单的解决方案是用如下内容注释你的类:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class Animal {
   ...
}

另请参阅:

关于java - java中使用jackson进行继承反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60048090/

相关文章:

java - 在 Hibernate 中使用实体 id 作为引用

java - 如何在Spring Boot中设置Jetty的 "maxFormContentSize"等值?

java - Jackson 反序列化 Double

spring - 在 Spring 环境中配置 Jackson 的 DeserializationProblemHandler

java - 如何在 Java 中使用 System.out.println

java - @Inject 可以在 pojo 中使用吗

java - 使用 Jackson XmlMapper 序列化时添加 DTD

json - Jackson JSON 动态忽略属性

java - 休息 Controller ,提供枚举名称但将其值保存在数据库中

java - 如何仅针对给定的单个端点忽略 JsonProperty 并让它适用于其他端点