如何更改 jaxb 模型以添加内部元素列表?

How to change jaxb model for add inner list of elements?

我使用 spring 创建 rest-controller 和 jaxb lib 与客户端交换 xml - 元素,所以,我的模型是用户,用户和 属性。 用户包含用户列表,每个用户包含属性列表。使用用户列表元素创建用户 - 它可以工作,但不能为用户元素创建内部 属性-列表。

我的模型是:

@XmlRootElement(name = "Users")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@XmlAccessorType(XmlAccessType.FIELD)
public class Users {
    @XmlElement(name = "User")
    private List<User> users;

    @XmlElement(name = "UserError")
    private UserError error;
}


@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "User")
@XmlAccessorType(XmlAccessType.FIELD)
public class User implements Serializable {
    @XmlElement(name = "Id")
    private String id;

    @XmlElement(name = "Name")
    private String name;

    @XmlElement(name = "Property")
    private List<Property> properties;
}


@Getter
@Setter
@NoArgsConstructor
@XmlRootElement(name = "Property")
@AllArgsConstructor
@XmlAccessorType(XmlAccessType.FIELD)
public class Property implements Serializable {
    @XmlElement(name = "passport")
    private String passport;

    @XmlElement(name = "age")
    private String age;
}

如何更改 jaxb 模型以更改 xml 来自:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Users>
    <User>
        <Id>fff</Id>
        <Name>Alex</Name>
        <Property>
           <Name>passport</Name>
           <Value>111-222</Value>
        </Property>
        <Property>
           <Name>car</Name>
           <Value>bmv</Value>
        </Property>
    </User>
</Users>

到此查看介绍

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Users>
    <User>
        <Id>fff</Id>
        <Name>Alex</Name>
        <Properties>
            <Property>
                <Name>passport</Name>
                <Value>111-222</Value>
            </Property>
            <Property>
                <Name>car</Name>
                <Value>bmv</Value>
            </Property>
        </Properties>
    </User>
</Users>

很简单。只需在定义中添加一个 @XmlElementWrapper 注释 Java 变量 properties:

@XmlElementWrapper(name = "Properties")
@XmlElement(name = "Property")
private List<Property> properties;

这将在 <Property>...</Property> 个元素的序列周围添加 <Properties>...</Properties>