Jackson 2.2.3
首先,请原谅这个愚蠢的错误,我在一个断开的网络上,所以我不得不手动重新打字)
我有以下XML:
<orgs>
<org name="Test1">
<item>a</item>
<item>b</item>
</org>
<org name="Test2">
<item>c</item>
<item>d</item>
<item>e</item>
</org>
</orgs>
我有以下类来解析它:
@XmlRootElement(name = "orgs")
@XmlAccessorType(XmlAccessType.FIELD)
public class XmlOrgElements {
private List<Org> orgs;
public List<Org> getOrgs() {
return orgs;
}
public void setOrg(List<Org> orgs) {
this.orgs = orgs;
}
public class Org {
@JacksonXmlProperty(isAttribute = true)
private String name;
private List<Item> items;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Item> getItems() {
return items;
}
public void setName(List<Item> items) {
this.items = items;
}
}
public class Item {
@JacksonXmlText
private String item;
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
}
}
但我回来的只是“orgs = null”。有谁知道为什么?
答案 0 :(得分:4)
您需要为列表启用展开处理;默认是使用“包装”格式。诊断此问题的最佳方法是从Java对象开始,序列化为XML,并查看输出格式是什么。 这给出了结构如何不同的想法。
如果您想默认为展开样式,可以使用:
JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
mapper.registerModule(module);
还有一个注释@JacksonXmlElementWrapper
:
public class Bean {
@JacksonXmlElementWrapper(useWrapping=false)
public List<Stuff> entry;
}
以每个列表属性为基础更改行为。
答案 1 :(得分:0)
以下是那些阅读的答案:
@JacksonXmlRootElement(localname = "orgs")
public class Orgs {
@JacksonXmlElementWrapper(useWrapping = false)
private List<Org> org;
public List<Org> getOrg() {
return org;
}
public void setOrg(List<Org> org) {
this.orgs = org;
}
public Orgs() {}
}
public class Org {
@JacksonXmlProperty(isAttribute = true)
private String name;
@JacksonXmlElementWrapper(useWrapping = false)
private List<String> item;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getItem() {
return item;
}
public void setItem(List<String> item) {
this.item = item;
}
}