Jersey utilise JAXB pour la sérialisation . JAXB ne peut pas sérialiser une carte car il n'y a pas de type XML pour le type de carte Java. De plus, Map est une interface et JAXB n'aime pas les interfaces. Si vous utilisez JAXBJackson bridge pour marshal, vous rencontrerez un problème.
Vous devez créer un adaptateur comme ci-dessous et annoter votre propriété Carte avec
@XmlJavaTypeAdapter(MapAdapter.class)
private Map<String,String> properties;
@XmlSeeAlso({ Adapter.class, MapElement.class })
public class MapAdapter<K,V> extends XmlAdapter<Adapter<K,V>, Map<K,V>>{
@Override
public Adapter<K,V> marshal(Map<K,V> map) throws Exception {
if (map == null)
return null;
return new Adapter<K,V>(map);
}
@Override
public Map<K,V> unmarshal(Adapter<K,V> adapter) throws Exception {
throw new UnsupportedOperationException("Unmarshalling a list into a map is not supported");
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Adapter", namespace="MapAdapter")
public static final class Adapter<K,V>{
List<MapElement<K,V>> item;
public Adapter(){}
public Adapter(Map<K,V> map){
item = new ArrayList<MapElement<K,V>>(map.size());
for (Map.Entry<K, V> entry : map.entrySet()) {
item.add(new MapElement<K,V>(entry));
}
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="MapElement", namespace="MapAdapter")
public static final class MapElement<K,V>{
@XmlAnyElement
private K key;
@XmlAnyElement
private V value;
public MapElement(){};
public MapElement(K key, V value){
this.key = key;
this.value = value;
}
public MapElement(Map.Entry<K, V> entry){
key = entry.getKey();
value = entry.getValue();
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
}
Jamais entendu parler de JSON? Vous venez de le recréer;) Bien que vous l'ayez étiqueté comme tel ... quelle est la question, exactement? Il existe un certain nombre de parseurs JSON pour Java. –
Veuillez ne pas insulter les gens. Cela ne vous mènera pas très loin. –
@BrianRoach Si vous avez bien lu la question, Jeffrey a mentionné le terme «GSON». Gson est une bibliothèque Java qui peut être utilisée pour convertir des objets Java en leur représentation JSON. Donc, la question ici est un peu plus sophistiquée que de sortir un analyseur JSON d'une recherche Google et l'utiliser. –