我有 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/