Как изменить модель jaxb для добавления внутреннего списка элементов? - PullRequest
0 голосов
/ 07 декабря 2018

Я использую Spring для создания rest-controller и jaxb lib для обмена с клиентскими xml-элементами, поэтому моя модель это Users, User и Property.Пользователи содержат список пользователей, каждый пользователь содержит список свойств.Создание пользователей с элементами списка пользователей - это работает, но не может создать внутренний список свойств для элементов пользователя.

Мои модели:

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

1 Ответ

0 голосов
/ 07 декабря 2018

Это легко.Просто добавьте аннотацию @XmlElementWrapper к определению переменной Java properties:

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

Это добавит <Properties>...</Properties> вокруг последовательности элементов <Property>...</Property>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...