簡體   English   中英

JAXB在一個步驟中將XmlElement和XmlAttribute的集合封送處理

[英]JAXB marshall a Collection to a XmlElement and a XmlAttribute in one step

我想將Collection編組為嵌套屬性。

現在我有:

@XmlElement(name="entry")
public Collection<Integer> getSizes(){ ... }

返回:

<entry>1</entry>
<entry>2</entry>

但我想得到:

<entry id="1"/>
<entry id="2"/>

沒有新課程,這可能嗎?

如果沒有新課程,似乎是不可能的。 使用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(){ ... }

正如公認的答案所說, XmlAdapter是標准的JAXB解決方案。

但是,如果您將EclipseLink MOXy用作JAXB提供程序,並且可以使用其擴展名之一,即@XmlPath ,則可以使用它來實現相同的結果。

要將集合值封送為屬性,可以像這樣使用它:

@XmlPath("entry/@id")
public Collection<Integer> getSizes(){ ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM