我最近開始使用 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字符串中,也無法在以后恢復。
因此,您必須至少將實際類定義為內部類。您仍然需要定義如何存儲類型信息。
添加回答
舉報
0/150
提交
取消