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

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

如何識別 Jackson 錯誤中缺少的類型 ID?

如何識別 Jackson 錯誤中缺少的類型 ID?

滄海一幻覺 2023-06-08 17:16:22
我正在使用 Jackson 將 JSON 寫入文本文件,JSON 表示從抽象類繼承的 2 個類,但無論是否使用兩個類或一個/或一個類,都會發生錯誤。JSON 似乎編寫正確,但在閱讀時,我收到以下錯誤:Missing type id when trying to resolve subtype of [simple type, class model.BaseContact]: missing type id property 'type'     at [Source: (File); line: 52, column: 1]json as follows:    {   "allContacts" : [ {     "type" : "personal",    "addressCity" : "Hamilton",    "addressNum" : "199",   "addressPOBox" : null,    "addressPostCode" : null,    "addressStreet" : "River Rd",    "addressSuburb" : null,    "email" : null,    "latitude" : null,    "longitude" : null,    "name" : "silly simon",    "notes" : null,    "phoneNumber" : "09754321",    "photoBytes" : null,    "photoURL" : null  }, {    "type" : "personal",    "addressCity" : "Auckland",    "addressNum" : "482",    "addressPOBox" : null,    "addressPostCode" : null,    "addressStreet" : "Smith Rd",    "addressSuburb" : null,    "email" : null,    "latitude" : null,    "longitude" : null,    "name" : "paul smith",    "notes" : null,    "phoneNumber" : "0544555",    "photoBytes" : null,    "photoURL" : null  }, {    "type" : "personal",    "addressCity" : "Appleby",    "addressNum" : "123",    "addressPOBox" : null,    "addressPostCode" : null,    "addressStreet" : "Apple rd",    "addressSuburb" : null,    "email" : null,    "latitude" : null,    "name" : "Steve Jobbs",    "notes" : null,    "phoneNumber" : "08004343",    "photoBytes" : null,    "photoURL" : null  } ],  "size" : 3}錯誤消息指的是第 52 行第 1 列,假設調試器從第 1 行開始,該行將是最后一個大括號之后的行。
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

更新:

BusinessContactclass 應該用@JsonTypeName("business")?和PersonContactclass with@JsonTypeName("personal")而不是注釋@JsonTypeName("type"),因為你應該在繼承者中定義特定類型。

@JsonTypeInfo注釋完全可以從子類中刪除。

更新 2:

附加PersonContact類應該有默認構造函數:

public?PersonContact(){}

輸入 JSON 文件不是列表,它是具有兩個屬性的實體allContactssize。因此它不能映射到ArrayList<BaseContact>.?因此,應創建具有這兩個屬性的新實體:

public class ContactsWrapper

{

? ?private List<BaseContact> allContacts;

? ?private int size;


? ?public List<BaseContact> getAllContacts()

? ?{

? ? ? return allContacts;

? ?}


? ?public void setAllContacts(List<BaseContact> allContacts)

? ?{

? ? ? this.allContacts = allContacts;

? ?}


? ?public int getSize()

? ?{

? ? ? return size;

? ?}


? ?public void setSize(int size)

? ?{

? ? ? this.size = size;

? ?}

}

應該更改讀取 JSON 的代碼:


ContactsWrapper contactsWrapper = new ObjectMapper().readerFor(ContactsWrapper.class).readValue(new File(fn));

abl = contactsWrapper.getAllContacts();

現在 JSON 被映射到ContactsWrapper并使用 getter 將聯系人列表分配給abl變量。


查看完整回答
反對 回復 2023-06-08
  • 1 回答
  • 0 關注
  • 381 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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