2012-09-14 46 views
4

我正在使用Java Jersey 1.x來編組具有多個成員的對象,其中之一是列表。所有成員變量都正確編組,並返回正確的返回類型。但是,它不包含返回數據中的objectList澤西編組成員列表問題

實施例:

@XmlRootElement 
public class ClassWithList { 
    private String front; 
    private int total; 
    private ArrayList<AnotherPOJOObject> objectList; 
... 
getters/setters 

吸氣劑:

public List<AnotherPOJOObject> getObjectList() { 
    return objectList; 
} 

我調試它並檢查鏈表類確實用數據填充。 AnotherPOJOObject也被標註爲XmlRootElement

+0

你有一個objectList的公共getter/seter嗎? – Oleksi

+0

@Oleksi:是的,我已經更新了我的問題以包含它。 –

+0

你的'getObjectList()'方法是否有'@ XmlElement'註解? – condit

回答

0

感謝的建議,basiljames,我能得到更接近答案。真正的問題是AnotherPOJOOject的名單畢竟不是那麼簡單。每個對象都有自己的無類型Map,並且將Marshaller投入合適,因爲它總是想知道對象的類型。

我想從這個答案的外賣,以確保您返回的每個集合都有一個明確定義的類型!

1

查看http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/XmlAccessorType.html。它詳細介紹JAXB將如何嘗試序列化POJO。特別值得注意的是,它只默認爲公共成員 - 這意味着「每個公共getter/setter對和每個公共字段都將自動綁定到XML,除非由XmlTransient註釋」。在這種情況下,我猜你沒有objectList的public setter字段,所以JAXB不會序列化它。要獲取列表序列化,你可以:

  • 添加公共setter方法的鏈表類
  • 聲明鏈表類是公共的(可能不是一個好主意)
  • 添加@XmlElement註釋吸氣劑明確地告訴JAXB將列表編組爲XML。
1

我曾遇到同樣的問題,經過一些試驗和錯誤後解決。

先給註釋@XmlElementWrapper(name = "orders")getObjectList(),也使類型private List<AnotherPOJOObject> objectList;