我有一个需要在代码中创建的REST响应:
<sample>
<tags>
<tag>
<name>ABC</name>
<Date>2014-10-14T12:30:05Z</ingress>
</tag>
<tag>
<name>DEF</name>
<Date>2014-10-14T12:30:05Z</ingress>
</tag>
</tags>
</sample>
然而,我正在
<sample>
<tags>
<name>ABC</name>
<Date>2014-10-14T12:30:05Z</ingress>
</tags>
<tags>
<name>DEF</name>
<Date>2014-10-14T12:30:05Z</ingress>
</tags>
</sample>
在响应中。有人可以帮助我如何声明Java类以获得所需的REST响应吗?
这是java代码:
@XmlRootElement(name = "sample")
public class Sample {
private List<Tag> tags;
@XmlElement(name = "tags")
public List<Tag> getTags() {
return tags;
}
/**
* @param tags
* the tags to set
*/
public void setTags(List<Tag> tags) {
this.tags = tags;
}
}
@XmlRootElement(name = "tag")
public class Tag {
private String name;
private Date date;
/**
* @return the name
*/
@XmlElement(name = "name")
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the date
*/
@XmlElement(name = "date")
public Date getDate() {
return date;
}
/**
* @param date
* the date to set
*/
public void setDate(Date date) {
this.date = date;
}
}
由于
答案 0 :(得分:3)
@XmlElement(name = "tags")
List<Tag> tags;
它基本上读取列表中的每个项目,创建一个名为<tags>
的元素。所以从本质上讲,你拥有的是<subject>
元素包装多个<tags>
。
获得另一个“上层”元素的几个选项
您可以创建一个“高级”类来表示,例如Tags
public class Tags {
protected List<Tag> tags;
@XmlElement(name = "tag")
public List<Tag> getTags() {
if (tags == null) {
tags = new ArrayList<>();
}
return tags;
}
public void setTags(List<Tag> tags) {
this.tags = tags;
}
}
然后将Tags
的实例作为Sample
@XmlRootElement(name = "sample")
public class Sample {
private Tags tags;
@XmlElement(name = "tags")
public void setTags(Tags tags) {
this.tags = tags;
}
public Tags getTags() {
return tags;
}
}
或强>
更简单的解决方案就是使用@XmlElementWrapper
围绕XML表示生成包装元素。这主要用于生成集合
的包装XML元素
使用原始代码,您可以简单地将注释添加到列表
@XmlRootElement(name = "sample")
public class Sample {
private List<Tag> tags;
@XmlElementWrapper(name = "tags")
@XmlElement(name = "tag")
public List<Tag> getTags() {
if (tags == null) {
tags = new ArrayList<>();
}
return tags;
}
public void setTags(List<Tag> tags) {
this.tags = tags;
}
}
答案 1 :(得分:1)
您只需使用@XmlElementWrapper
注释即可将分组元素添加到您的收藏中。
@XmlElementWrapper
@XmlElement(name = "tag")
public List<Tag> getTags() {
return tags;
}
注意: @XmlElement
适用于集合中的每个项目。