[英]Converting XML String to Java Object Jackson / JAXB
第一次在stackoverflow上發布,而不是尋求幫助!
我有一大堆XML,試圖將其反序列化為一個簡單的Java對象。
我有以下XML斑點:
<library>
<book index="654" name="Harry Potter" price="£11.99" rating="5"/>
<book index="7893" name="Ready Player One" price="£16.99" rating="5"/>
<book index="433" name="Piers Morgan; Don't You Know Who I Am?" price="£8.99" rating="2"/>
</library>
然后,我試圖將其轉換為簡單的POJO:
@JacksonXmlRootElement(localName = "library")
public class Library {
//This will be the breaking point :'(
List<Book> bookList = new ArrayList<>();
}
public class Book {
@JacksonXmlProperty(isAttribute = true)
Integer index;
@JacksonXmlProperty(isAttribute = true)
String name;
@JacksonXmlProperty(isAttribute = true)
String price;
@JacksonXmlProperty(isAttribute = true)
Integer rating;
}
我正在努力尋找在Jacksons文檔中使用的正確注釋。 我敢肯定,這肯定是一個非常簡單的更改,就像通常一樣!
我選擇Jackson而不是JAXB,因為Jackson是較新的庫,並且我知道與JAXB相關的一些速度問題。
無論我在這里多么努力,我總是會卡在書單上,而且沒有條目。 有人可以幫忙嗎? 有人會推薦我看看傑克遜上的JAXB嗎?
如您所料,只需要在List<Book>
屬性上添加一些注釋,即可使Jackson反序列化功能與XML內容一起正常工作:
@JacksonXmlProperty
,其isAttribute = false
(告訴Jackson具有<book>
元素,但沒有book = "...."
屬性)和localName = "book"
(告訴Jackson這些元素的名稱) @JacksonXmlElementWrapper
與useWrapping = false
(告訴傑克遜不必圍繞這些額外的包裝元素<book>
元素) = new ArrayList<>()
對其進行初始化,因為Jackson的反序列化也將對此進行處理。 @JacksonXmlProperty(isAttribute = false, localName = "book")
@JacksonXmlElementWrapper(useWrapping = false)
List<Book> bookList;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.