JAXB: Map을
JAXB는 기본적으로 Map을 다음과 같은 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>
사용자 정의 XML 구조에 대한 권장 사항
동적 요소 이름을 사용하여 XML을 생성하는 것은 일반적으로 권장되지 않습니다. XSD(XML 스키마)는 인터페이스 계약을 정의합니다. JAXB는 코드에서 XSD를 생성할 수 있으므로 XSD의 사전 정의된 구조에 따라 교환되는 데이터를 제한할 수 있습니다.
기본적인 경우 Map
귀하의 접근 방식에서는 지도에 알 수 없는 유형의 요소가 포함되어 있음을 지정하는 XSD가 생성되며 이는 모범 사례에 위배됩니다.
Enum Key Solution
엄격한 계약을 시행하려면 맵 키 대신 열거형을 사용하는 것이 좋습니다. 문자열:
public enum KeyType { KEY, KEY2; } @XmlJavaTypeAdapter(MapAdapter.class) Map<KeyType, String> mapProperty;
JAXB는 사전 정의된 키 KEY 또는 KEY2를 사용하여 맵 요소를 요소로 제한하는 스키마를 생성합니다.
기본 구조 단순화
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; } }
위 내용은 JAXB를 사용하여 맵을 '값' XML 구조로 마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!