[英]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由於某種原因沒有正確傳遞泛型類型信息。
有解決辦法:
List
和Map
始終是Java對象的屬性,而不是根級別的值。 這確保了類型的工作,即使Restlet沒有為根值傳遞泛型類型 HashSet
使您具有非泛型類型; 傑克遜然后可以找出HashSet
泛型類型 對於第二種情況,您只需執行以下操作:
public class MyTraits extends HashSet<Trait> { }
和
@Get("json")
public MyTraits getTraits();
它會起作用,因為MyTraits
沒有自己的通用類型; 但它的超類型聲明具有傑克遜可用的通用參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.