第一次在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吗?
答案 0 :(得分:0)
如您所料,您只需要在List<Book>
属性上添加一些注释,
使Jackson的反序列化可以与您的XML内容一起正常工作:
@JacksonXmlProperty
和isAttribute = false
(告诉杰克逊您有<book>
个元素,但没有book = "...."
个属性)
和localName = "book"
(告诉杰克逊这些元素的名称)@JacksonXmlElementWrapper
和useWrapping = false
(告诉Jackson,您在这些<book>
元素周围没有其他包装元素)= new ArrayList<>()
对其进行初始化,因为
杰克逊的反序列化也将为此提供帮助。@JacksonXmlProperty(isAttribute = false, localName = "book")
@JacksonXmlElementWrapper(useWrapping = false)
List<Book> bookList;