Java 具有两个包装器元素的Jackson XML ArrayList输出
我在Jackson生成的XML输出中得到了两个包装器元素。 我只想要一个 我有一个Java beanJava 具有两个包装器元素的Jackson XML ArrayList输出,java,xml,jackson,marshalling,Java,Xml,Jackson,Marshalling,我在Jackson生成的XML输出中得到了两个包装器元素。 我只想要一个 我有一个Java bean @Entity @Table(name = "CITIES") @JacksonXmlRootElement(localName = "City") public class City implements Serializable { private static final long serialVersionUID = 21L; @Id @GeneratedVa
@Entity
@Table(name = "CITIES")
@JacksonXmlRootElement(localName = "City")
public class City implements Serializable {
private static final long serialVersionUID = 21L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JacksonXmlProperty(isAttribute = true)
private Long id;
@JacksonXmlProperty
private String name;
@JacksonXmlProperty
private int population;
// getters, setters etc
}
和一个列表包装器类
@JacksonXmlRootElement
public class Cities implements Serializable {
private static final long serialVersionUID = 22L;
@JacksonXmlProperty(localName = "City")
@JacksonXmlElementWrapper(localName = "MyCities")
private List<City> cities = new ArrayList<>();
public List<City> getCities() {
return cities;
}
public void setCities(List<City> cities) {
this.cities = cities;
}
}
“Cities”是根元素,而不是包装器。删除实际的包装器元素“MyCities”难道不起作用吗
添加
@jacksonxmlementwrapper(useWrapping=false)
也会有所帮助。在城市中用@jacksonxmlementwrapper(localName=“MyCities”)
替换@jacksonxmlementwrapper(useWrapping=false)
应该会删除额外的包装元素
从:
@JacksonXmlElementWrapper
允许指定要用于的XML元素
包装列表和地图属性;或禁用使用(使用“useWrapping”
设置为false)
在城市实施的修复程序
:
@JacksonXmlRootElement
public class Cities implements Serializable {
private static final long serialVersionUID = 22L;
@JacksonXmlProperty(localName = "City")
@JacksonXmlElementWrapper(useWrapping = false)
private List<City> cities = new ArrayList<>();
public List<City> getCities() {
return cities;
}
public void setCities(List<City> cities) {
this.cities = cities;
}
}
@JacksonXmlRootElement
公共类城市实现可序列化{
私有静态最终长serialVersionUID=22L;
@JacksonXmlProperty(localName=“城市”)
@JacksonXmlElementWrapper(useWrapping=false)
私有列表城市=新的ArrayList();
公共列表(城市){
回归城市;
}
公共城市(列出城市){
这个。城市=城市;
}
}
您还可以使用mapper.setDefaultUseWrapper(false)直接在映射器中禁用包装功能代码>
在这种情况下,您只需从城市中删除@jacksonxmlementwrapper(localName=“MyCities”)
,@jacksonxmlementwrapper(useWrapping=false)
即可。
<Cities>
<City id="1">
<name>Bratislava</name>
<population>432000</population>
</City>
<City id="2">
<name>Budapest</name>
<population>1759000</population>
</City>
<City id="3">
<name>Prague</name>
<population>1280000</population>
</City>
</Cities>
@JacksonXmlRootElement
public class Cities implements Serializable {
private static final long serialVersionUID = 22L;
@JacksonXmlProperty(localName = "City")
@JacksonXmlElementWrapper(useWrapping = false)
private List<City> cities = new ArrayList<>();
public List<City> getCities() {
return cities;
}
public void setCities(List<City> cities) {
this.cities = cities;
}
}