JAXB: Marshalling Map in
Während JAXB nativ das Marshalling einer Map in XML-Strukturen unterstützt wie:
<map> <entry> <key> KEY </key> <value> VALUE </value> </entry> <entry> <key> KEY2 </key> <value> VALUE2 </value> </entry> ... </map>
Möglicherweise benötigen Sie eine XML-Struktur, bei der der Schlüssel der Elementname und der Wert sein Inhalt ist:
<map> <key> VALUE </key> <key2> VALUE2 </key2> ... </map>
Empfehlung gegen benutzerdefinierte XML-Strukturen
Vom Generieren von XML mit dynamischen Elementnamen wird generell abgeraten. XML-Schemas (XSDs) definieren Schnittstellenverträge. JAXB kann XSDs aus Code generieren, sodass Sie die ausgetauschten Daten gemäß vordefinierten Strukturen in XSDs einschränken können.
Im Standardfall wird ein Map
Ihr Ansatz würde eine XSD generieren, die angibt, dass die Karte Elemente mit unbekannten Typen enthält, was gegen gute Praktiken verstößt.
Enum Key Solution
Um einen strengen Vertrag durchzusetzen, sollten Sie die Verwendung eines Aufzählungstyps als Kartenschlüssel anstelle eines Strings in Betracht ziehen:
public enum KeyType { KEY, KEY2; } @XmlJavaTypeAdapter(MapAdapter.class) Map<KeyType, String> mapProperty;
JAXB generiert ein Schema, das Kartenelemente auf Elemente beschränkt, die die vordefinierten Schlüssel KEY oder verwenden SCHLÜSSEL2.
Vereinfachung der Standardstruktur
Wenn Sie die einfachere XML-Struktur von
class MapElements { @XmlAttribute public String key; @XmlAttribute public String value; } class MapAdapter extends XmlAdapter<MapElements[], Map<String, String>> { public MapElements[] marshal(Map<String, String> arg0) { MapElements[] mapElements = new MapElements[arg0.size()]; int i = 0; for (var entry : arg0.entrySet()) mapElements[i++] = new MapElements(entry.getKey(), entry.getValue()); return mapElements; } 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; } }
Das obige ist der detaillierte Inhalt vonWie kann ich eine Karte mit JAXB in eine „Wert“-XML-Struktur umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!