簡體   English   中英

將XML字符串轉換為Java對象Jackson / JAXB

[英]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這些元素的名稱)
  • 您需要@JacksonXmlElementWrapperuseWrapping = false (告訴傑克遜不必圍繞這些額外的包裝元素<book>元素)
  • 順便說一句:您不需要使用= new ArrayList<>()對其進行初始化,因為Jackson的反序列化也將對此進行處理。
@JacksonXmlProperty(isAttribute = false, localName = "book")
@JacksonXmlElementWrapper(useWrapping = false)
List<Book> bookList;

暫無
暫無

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

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