Maison >Java >javaDidacticiel >Comment regrouper une carte vers un format XML personnalisé avec des éléments de valeur-clé à l'aide de JAXB ?

Comment regrouper une carte vers un format XML personnalisé avec des éléments de valeur-clé à l'aide de JAXB ?

DDD
DDDoriginal
2024-11-13 03:38:02346parcourir

How to Marshal a Map to a Custom XML Format with Key-Value Elements Using JAXB?

Marshalling des cartes vers un format XML personnalisé à l'aide de JAXB

Question :

Comment pouvons-nous marshaler une carte dans un format XML personnalisé, où les paires clé-valeur sont représentées comme valeur éléments ?

Discussion :

L'approche JAXB par défaut pour le marshalling d'une carte génère du XML avec une structure comme :

<map>
  <entry>
    <key>KEY</key>
    <value>VALUE</value>
  </entry>
  <entry>
    <key>KEY2</key>
    <value>VALUE2</value>
  </entry>
</map>

Cependant, parfois nous il peut être nécessaire que le XML soit dans un format personnalisé :

<map>
  <key>VALUE</key>
  <key2>VALUE2</key2>
</map>

Solution 1 : Restreindre le contrat XML

Ceci n'est pas recommandé car cela rend les éléments XML dépendants du contenu d'exécution de la carte, ce qui n'est pas souhaitable pour l'utilisation de la couche d'interface. Au lieu de cela, nous suggérons d'utiliser un type énuméré comme clé pour la carte.

public enum KeyType {
  KEY,
  KEY2;
}

@XmlJavaTypeAdapter(MapAdapter.class)
Map<KeyType, String> mapProperty;

Solution 2 : Simplifier la structure par défaut

Si nous souhaitons simplifier la structure générée par défaut structure en :

<map>
    <item key="KEY" value="VALUE"/>
    <item key="KEY2" value="VALUE2"/>
</map>

Nous pouvons utiliser un adaptateur Map qui convertit la carte en un tableau de Éléments de carte :

class MapElements {
    @XmlAttribute
    public String key;
    @XmlAttribute
    public String value;
    
    ...
}

public class MapAdapter extends XmlAdapter<MapElements[], Map<String, String>> {
    ...
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn