首頁 > Java > java教程 > 如何使用 JAXB 將映射編組為「值」元素?

如何使用 JAXB 將映射編組為「值」元素?

Susan Sarandon
發布: 2024-11-13 04:25:02
原創
334 人瀏覽過

How to Marshal a Map into `value` Elements with JAXB?

將映射編組為value使用JAXB

問題

映射通常被編組為XML 結構,例如:

<map>
  <entry>
    <key>KEY</key>
    <value>VALUE</value>
  </entry>
  <entry>
    <key>KEY2</key>
    <value>VALUE2</value>
  </entry>
  ...
</map>
登入後複製

但是,有時需要生成XML,其中鍵成為元素名稱,且該值將成為其內容:

<map>
  <KEY>VALUE</KEY>
  <KEY2>VALUE2</KEY2>
 ...
</map>
登入後複製

解決方案

選項1:動態命名XML 元素

不建議使用動態屬性名稱,因為它違反了XML 架構和介面契約原則。

選項2:枚舉鍵類型

要維護嚴格的介面契約,請為映射使用枚舉鍵類型:

public enum KeyType {
    KEY,
    KEY2;
}

@XmlJavaTypeAdapter(MapAdapter.class)
Map<KeyType, String> mapProperty;
登入後複製

選項3:簡化編組

要將預設編組結構簡化為,請使用將Map 轉換為MapElements 陣列的MapAdapter:

class MapElements {
    @XmlAttribute
    public String key;
    @XmlAttribute
    public String value;
    
    // Required by JAXB
    private MapElements() {}
    
    public MapElements(String key, String value) {
        this.key = key;
        this.value = value;
    }
}

class MapAdapter extends XmlAdapter<MapElements[], Map<String, String>> {
    @Override
    public MapElements[] marshal(Map<String, String> arg0) {
        MapElements[] mapElements = new MapElements[arg0.size()];
        int i = 0;
        for (Entry<String, String> entry : arg0.entrySet()) {
            mapElements[i++] = new MapElements(entry.getKey(), entry.getValue());
        }
        return mapElements;
    }
    
    @Override
    public Map<String, String> unmarshal(MapElements[] arg0) {
        Map<String, String> r = new TreeMap<>();
        for (MapElements mapelement : arg0) {
            r.put(mapelement.key, mapelement.value);
        }
        return r;
    }
}
登入後複製

以上是如何使用 JAXB 將映射編組為「值」元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板