gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:02:42 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com