JAX-RS, Map<String,String> JSON sans la surcharge?
Je suis à l'aide de JAX-RS pour créer des services web restful en Java. Je suis arriver à beaucoup de frais généraux dans le JSON.
Classe de données:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Test {
private Map<String,String> data;
Test() {}
public Test(Map<String,String> data) {
this.data = data;
}
public Map<String, String> getData() {
return data;
}
}
Service:
@GET
@Path("/test")
@Produces("application/json; charset=UTF-8;")
public Test test() {
Map<String,String> map = new HashMap<String,String>();
map.put("foo", "bar");
map.put("bingo", "bongo");
return new Test(map);
}
Produit:
{"data":{"entry":[{"key":"foo","value":"bar"},{"key":"bingo","value":"bongo"}]}}
Je tiens à produire:
{"data":{"foo":"bar","bingo":"bongo"}}
Quelle est la façon la plus simple d'arriver à cela? Je suis libre de redifine ma classe de données mais je ne peux pas savoir à l'avance les clés ou la taille de la carte.
Compte tenu de la surcharge de la requête web, êtes-vous sûr que le format json vaut la peine de l'optimisation? (En d'autres termes, le profilage de votre application vous conduire à croire que le format de données json est un problème de performance?) Souviens-toi... l'optimisation Prématurée est la racine de tous les maux dans la programmation
OriginalL'auteur | 2009-12-14
Vous devez vous connecter pour publier un commentaire.
Façon la plus simple serait d'utiliser
List<Pair>
au lieu oùPair
est juste un Javabean avec deux propriétés.OriginalL'auteur BalusC
"JAXB spec définit un traitement spécial pour la Carte quand il est utilisé comme une propriété d'un bean."
À la lumière de cela, je ne pense pas qu'il existe beaucoup que vous pouvez faire (pour l'instant) à l'exception, peut-être, d'écrire votre propre MessageBodyWriter (https://jsr311.dev.java.net/nonav/javadoc/javax/ws/rs/ext/MessageBodyWriter.html)
OriginalL'auteur user258793
Si vous n'utilisez pas JAXB annoté des objets, mais de simples POJO, vous pouvez obtenir le bon comportement suffit d'activer le POJO cartographie, de concert avec les Jackson librairie JSON.
Donc dans
web.xml
, si vous utilisez le filtre (similaire pour servlet), votre configuration doit être:Et dépendent seulement de la jersey-json dépendance maven config, ou le télécharger à partir du site web et de mettre jackson dans votre classpath. Voir aussi cette réponse et cette réponse, et ce blog. Et pourquoi sur la terre, ce n'est pas la norme de comportement, je ne sais pas.
OriginalL'auteur wds