在JAXB中,可以使用@XmlElementWrapper屬性指定要包裝元素集合的標記。但是,即使集合爲空(即使集合爲null
,也不會出現這些包裝標籤)。如果集合是空的,有沒有辦法讓JAXB省略包裝標籤?在集合上使用適配器似乎不起作用,因爲JAXB將其解釋爲意味着它應該將適配器應用於集合中的每個元素。集合爲空時忽略JAXB中的包裝器標記
1
A
回答
1
您可以通過使用 Marshal Event Callbacks以一種有點冒失的方式強制執行所需的行爲。
@XmlRootElement(name="example")
@XmlAccessorType(XmlAccessType.FIELD)
public class Example {
@XmlElementWrapper(name="wrapper")
@XmlElement(name="item")
private List<Item> items;
// invoked by Marshaller before marshalling
private void beforeMarshal(Marshaller marshaller) {
if (items != null && items.isEmpty())
items = null;
}
// ... getters and setters
}
如Marshal Event Callbacks 描述實際上有2的替代方法如何使用名帥回調:
- 把
beforeMarshal
和/或afterMarshal
法直接到類,僅此而已。 (這是更簡單的方法,這就是爲什麼我在我的答案中使用了這個)。 - 創建一個Marshaller.Listener並在那裏寫
beforeMarshal
和afterMarshal
方法。然後,您需要在Marshaller
中註冊該聽衆。
1
您可以使用Marshaller
您可以添加偵聽器機制/設置監聽象下面這樣:
jaxbMarshaller.setListener(new Listener()
{
@Override
public void beforeMarshal(Object source)
{
if (source instanceof MyCollectionWrapper)
{
MyCollectionWrapper wrapper = (MyCollectionWrapper)source;
if (wrapper.getCollection() != null && wrapper.getCollection().isEmpty())
{
wrapper.setCollection(null);
}
}
}
});
其中MyCollectionWrapper
是代表你的包裝類的類。
當收集爲空時,應該刪除包裝標籤。
相關問題
- 1. 強制jaxb unmarshaller忽略html標記
- 2. 驗證JAXB,但空白不被忽略
- 3. Nhibernate標準忽略子集合
- 4. JAXB解編忽略SOAP信封/頭標記
- 5. MIN()忽略SQLite中的空記錄
- 6. 忽略file_get_contents HTTP包裝中的錯誤?
- 7. Autoconf忽略編譯器標記
- 8. Jaxb implClass規範爲根元素忽略
- 9. Github在標記時忽略文件
- 10. 計數時忽略空格字符串標記
- 11. JAXB忽略內部元素
- 12. xjc/wsimport - 忽略JAXB綁定
- 13. 忽略JAXB中的根元素
- 14. JAXB生成的類:忽略中級班
- 15. JAXB:在bindings.xml中的globalBindings被忽略
- 16. Richfaces標記被忽略
- 17. Maven忽略scm標記
- 18. XML :: Simple忽略emdash標記?
- 19. XPath忽略結束標記
- 20. IE忽略!css中的重要標記
- 21. JAXB和包含泛型的集合
- 22. JAXB-Unmarshalling CDATA不會忽略空白空間和換行
- 23. 忽略元素包裝的CSS
- 24. 如何在參數爲空或空時忽略或忽略where子句
- 25. 如何從XML中忽略HTML標記?
- 26. 爲.onDisconnect()忽略空閒firebase
- 27. JAXB XJC編譯器忽略XML模式文檔中的mixed = true
- 28. 在GIT倉庫中標記臨時忽略的文件
- 29. 忽略perl中的空行?
- 30. 如何讓Android的APK打包程序忽略標記文件?