创建包装器
创建一个DefinitionWrapper 类,注释如下:
@XmlRootElement(name = "DefinitionList")
@XmlAccessorType(XmlAccessType.FIELD)
public class DefinitionWrapper {
@XmlElement(name = "definition")
private List<Definition> definitions;
public List<Definition> getDefinitions() {
return definitions;
}
public void setDefinitions(List<Definition> definitions) {
this.definitions = definitions;
}
}
确保Definition 类的注释如下:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Definition implements Serializable {
@XmlAttribute
private Integer id;
// Other fields
// Getters and setters
}
并更改您的端点方法以返回DefinitionWrapper:
@Path("discoverytopology")
public class DiscoveryTopology {
@GET
@Produces("application/xml")
public DefinitionWrapper getDefinitionList() {
List<Definition> definitions = db.getDefinitions();
DefinitionWrapper definitionWrapper = new DefinitionWrapper;
definitionWrapper.setDefinitions(definitions);
return definitionWrapper;
}
}
当编组为 XML 时,结果将是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DefinitionList>
<definition id="1"/>
<definition id="2"/>
<definition id="3"/>
</DefinitionList>
添加元素
您的Definition 类中可能需要除id 之外的其他字段。例如,考虑一下,您需要一个description 字段,它应该被编组为一个XML 元素。
要实现它,请使用 @XmlElement 注释您的字段,如下所示:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Definition implements Serializable {
@XmlAttribute
private Integer id;
@XmlElement
private String description;
// Getters and setters
}
当编组为 XML 时,结果将是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DefinitionList>
<definition id="1">
<text>This is a description</text>
</definition>
<definition id="2">
<text>This is a description</text>
</definition>
<definition id="3">
<text>This is a description</text>
</definition>
</DefinitionList>
添加值
您可以使用@XmlValue注释字段:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Definition implements Serializable {
@XmlAttribute
private Integer id;
@XmlValue
private String value;
// Getters and setters
}
当您的对象被编组为 XML 时,结果将如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DefinitionList>
<definition id="1">This is the value</definition>
<definition id="2">This is the value</definition>
<definition id="3">This is the value</definition>
</DefinitionList>
但是,每个类只允许使用一个带有 @XmlValue 注释的字段。如果一个类有任何用@XmlElement注解的字段,它就不能有任何用@XmlValue注解的字段。