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

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

將 JSON 字符串反序列化為具有接口數據成員的 Java 對象時出錯

將 JSON 字符串反序列化為具有接口數據成員的 Java 對象時出錯

炎炎設計 2022-12-21 11:53:20
我有一個 JSON 字符串,我想將它反序列化為一個帶有接口數據成員的 Java 對象。Java 對象如下所示:public class Person {     private String id;     private String name;     private AddressInterface addr;}Person 和 AddressInterface 都是第三方類,所以我無法對它們進行任何更改。當我使用以下反序列化 JSON 字符串時, objectMapper.readValue(json_file, Person.class)  我得到以下異常。這是因為對象映射器不知道如何反序列化 AddressInterface 字段。在這種情況下,有人可以讓我知道如何將字符串反序列化為 Person 對象嗎?非常感謝。 abstract types either need to be mapped to  concrete types, have custom deserializer,  or be instantiated with additional type information
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

AddressInterface是一個接口,被認為是抽象的。Foo和兩個類Bar都可以實現AddressInterface,但它無法判斷應該將數據反序列化為哪一個。


可能有效的隨機想法:

將接口放在包裝器中。我只是在猜測,因為我不知道圖書館的背景,但也許是這樣的。這里可能還有一些錯別字,但它顯示了總體思路。



    public class AbstractSerializable<T> implements Deserialize {

        private final String className;

        private T obj;


        public AbstractSerializable(T obj) {

              this.obj = obj;

              this.className = obj.getClass().getCardinalName();

        }


        @Override

        public AbstractSerializable deserialize(ObjectMapper objectMapper) {

             String clazz = input.readNext(String.class);

             return objectMapper.readNext(Class.forName(clazz));

        }


    }


編輯:如果您嘗試將 lambda 放入其中,這可能會中斷。


編輯 2: @Hadi 注意是正確的,Gson 會讓一些事情變得更容易,但是它會遇到同樣的問題。我確實找到了這篇文章,它解釋了如何在使用 Gson 時修復它。它對我的回答使用了類似的方法,但他們有更好的解釋。



查看完整回答
反對 回復 2022-12-21
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

問題是反序列化 AddressInterface 屬性,因為它是一個接口,我認為 objectMapper 正在嘗試初始化它的默認構造函數,如下所示


addr = new AddressInterface();

您可以創建一個繼承 AddressInterface 的空具體類并使用它代替 AddressInterface


public class Adress implements AddressInterface {

...

}



public class Person {

 private String id;

 private String name;

 private Adress addr;

}


查看完整回答
反對 回復 2022-12-21
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

使用GSON庫,您可以擺脫樣板代碼!

您可以在下面的鏈接中使用 GSON 庫!

https://www.tutorialspoint.com/gson/gson_quick_guide.htm


查看完整回答
反對 回復 2022-12-21
  • 3 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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