Java 具有两个包装器元素的Jackson XML ArrayList输出

Java 具有两个包装器元素的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

我在Jackson生成的XML输出中得到了两个包装器元素。 我只想要一个

我有一个Java bean

@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;
    }

}