簡體   English   中英

使用Restlet / Jackson反序列化JSON對象數組

[英]Deserializing JSON Array of Object Using Restlet/Jackson

我正在使用Restlet來調用返回JSON對象數組的API。 當進行類似的調用以撤回單個對象時,所有內容都會正確映射到自定義類,但是當我拉回數組時,Object將被映射為LinkedHashMap而不是此自定義對象。 我確定我只需要定義如何正確反序列化數組,但我還沒弄清楚具體如何做到這一點。

@Get("json")
public Trait getTrait();

@Get("json")
public HashSet<Trait> getTraits();

前者工作正常,但后者不起作用。 最后,當我嘗試迭代HashSet時,我可以犯這個錯誤:java.util.LinkedHashMap無法強制轉換為com.test.traits.Trait。

任何幫助,將不勝感激。

這通常是因為類型作為類(如HashSet )而不是泛型類型( HashSet<Trait> )傳遞。 如果是這樣,這等同於HashSet<Object> ,並且Jackson別無選擇,只能將內容綁定到可用的最簡單的Object類型,它只匹配某種java.util.Collection

聽起來Restlet由於某種原因沒有正確傳遞泛型類型信息。

有解決辦法:

  • 使用包裝器對象,以便ListMap始終是Java對象的屬性,而不是根級別的值。 這確保了類型的工作,即使Restlet沒有為根值傳遞泛型類型
  • 子類HashSet使您具有非泛型類型; 傑克遜然后可以找出HashSet泛型類型

對於第二種情況,您只需執行以下操作:

public class MyTraits extends HashSet<Trait> { }

@Get("json")
public MyTraits getTraits();

它會起作用,因為MyTraits沒有自己的通用類型; 但它的超類型聲明具有傑克遜可用的通用參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM