我需要将XML字符串解组到项目中已经存在的类中,但是我不知道如何将XML的特定部分解组到对象列表中。让我用一些代码解释一下:

我有这个XML:


<user>
  <id>123</id>
  <name>John Doe</name>
  <vaddresses>
    <address>
      <street>Street XYZ</street>
    </address>
    <address>
      <street>Street ABC</street>
    </address>
  </vaddresses>
</user>


我有这些课程:


用户


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User", propOrder = {"id", "name", "addresses"})
public class User {

    @XmlElement
    private int id;

    @XmlElement
    private String name;

    @XmlElement
    private List<Address> addresses;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Address> getAddresses() {
        return addresses;
    }

    public void setAddresses(List<Address> addresses) {
        this.addresses = addresses;
    }



地址


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Address", propOrder = {"street"})
public class Address {

    @XmlElement
    private String street;

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }
}


当我尝试将XML解组到这些类中时,字段id和name的处理正确,但是地址却没有相同:


输出量


User:
    Id: 123
    Nome: John Doe
    Addresses: null


我该如何解决这个问题?我可以使用一些JAXB注释吗?如何?还是我需要创建某种类型的XmlAdapter? (我已经尝试过了,但是没有成功...)

最佳答案

您可以利用@XmlElementWrapper在集合周围添加分组元素:

@XmlElementWrapper(name="vaddresses")
@XmlElement(name="address")
private List<Address> addresses;


注意

您添加的注释超出了必要。 JAXB是例外配置,因此您只需注释要XML表示形式与默认设置不同的位置。


http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html

10-07 12:04