如何更改 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>
。
我使用 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>
。