亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Jackson 反序列化匿名抽象類?

如何使用 Jackson 反序列化匿名抽象類?

慕容3067478 2021-11-17 12:31:22
我最近開始使用 Jackson 作為朋友推薦它,所以我決定創建這個 Item 對象,以便我可以玩序列化和反序列化,盡管反序列化時抽象類發生了異常。此處列出的 Item 對象public static abstract class Item implements Saveable, Serializable, Useable {    private static final long serialVersionUID = 45612874562156L;    private final String nameId;    String name;    String description;    int value;    public Item(String name, String description, int value) {        this.name = name;        this.nameId = name;        this.description = description;        this.value = value;    }    @Override    public void use() {}    @Override    public void save(Path directory) {        save(directory, nameId, Prefix.SHOP, this);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getDescription() { return description; }    public void setDescription(String description) {        this.description = description;    }    public int getValue() {        return value;    }    public void setValue(int value) {        this.value = value;    }}在嘗試通過 Google 搜索答案時,我嘗試啟用返回相同異常的默認類型,并嘗試實現您自己的反序列化器。我真的找不到一個很好的來源來展示如何創建自己的解串器。這相信我相信它可能通過擴展 StdDeserializer 來實現你自己的解串器,但我真的不知道如何。我希望在執行時返回一個項目,Saveable.load(Paths.get("./data", "other", "shop"), "Testing", Prefix.SHOP, GiftShop.Item.class)但目前我遇到了異常。我在這個 Spock 測試中測試了所有這些如果問題是我沒有創建自己的自定義反序列化器,那么關于如何實現一個的資源會很棒。我正在用 Java 10 和 Jackson 2.9.7 版編寫這一切。感謝您的時間,并希望我能提供所有需要的信息。
查看完整描述

1 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

問題是反序列化器不知道它應該從 JSON 字符串創建什么樣的類。你傳遞給它的類參數是一個抽象類,你不能在 java 中實例化一個抽象類。

您必須告訴對象映射器所需類的類型。@JsonTypeInfo在 Item.class 上使用注釋,它將在 JSON 字符串中存儲額外的類型信息。

但遺憾的是還不夠,因為匿名內部類只有一個臨時的對象類型,在方法之外是看不到的,所以即使它的類型信息存儲在JSON字符串中,也無法在以后恢復。

因此,您必須至少將實際類定義為內部類。您仍然需要定義如何存儲類型信息。


查看完整回答
反對 回復 2021-11-17
  • 1 回答
  • 0 關注
  • 273 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號