我想将Collection作为嵌套属性进行编组。
现在我有:
@XmlElement(name="entry")
public Collection<Integer> getSizes(){ ... }
返回:
<entry>1</entry>
<entry>2</entry>
但我想得到:
<entry id="1"/>
<entry id="2"/>
没有新课程,这可能吗?
答案 0 :(得分:4)
如果没有新课程,似乎是不可能的。使用XmlAdapter
:
class EntryAdapter extends XmlAdapter<EntryAdapter.Entry, Integer>
{
public EntryAdapter.Entry marshal(Integer id) {
return new Entry(id);
}
public Integer unmarshal(Entry e) {
return e.getId();
}
static class Entry
{
private Integer id;
public Entry() {}
public Entry(Integer id) { this.id = id; }
@XmlAttribute
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
}
}
-
@XmlElement(name="entry")
@XmlJavaTypeAdapter(EntryAdapter.class)
public Collection<Integer> getSizes(){ ... }
答案 1 :(得分:2)
正如接受的答案所说,XmlAdapter
是标准的JAXB解决方案。
但是如果你使用EclipseLink MOXy作为你的JAXB提供者并且可以使用它的一个扩展,即@XmlPath
,它可以用来实现相同的结果。
要将集合值编组为属性,可以像下面这样使用它:
@XmlPath("entry/@id")
public Collection<Integer> getSizes(){ ... }