Pourquoi je ne suis pas en mesure de les déballer et à la sérialisation Java carte à l'aide de l'Jackson bibliothèque Java?
Mon haricot ressemble à ceci:
class MyBean {
private @JsonUnwrapped HashMap<String, String> map = new HashMap<String, String>();
private String name;
public HashMap<String, String> getMap() {
return map;
}
public void setMap(HashMap<String, String> map) {
this.map = map;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Alors que je suis la sérialisation de l'bean en utilisant le code suivant:
MyBean bean = new MyBean();
HashMap<String, String> map = new HashMap<String, String>();;
map.put("key1", "value1");
map.put("key2", "value2");
bean.setMap(map);
bean.setName("suren");
ObjectMapper mapper = new ObjectMapper();
System.out.println("\n"+mapper.writeValueAsString(bean));
J'obtiens le résultat de ce genre:
{"map":{"key2":"value2","key1":"value1"},"name":"suren"}
mais
{"key2":"value2","key1":"value1","name":"suren"}
est prévu par la JacksonFeatureUnwrapping documentation. Pourquoi je n'obtiens pas la déballé résultat?
Vous devez vous connecter pour publier un commentaire.
@JsonUnwrapped
ne fonctionne pas pour les cartes, seulement pour le bon Pojo avec des getters et setters. Pour les cartes, Vous devez utiliser@JsonAnyGetter
et@JsonAnySetter
(disponible en jackson version >= 1.6).Dans votre cas, essayez ceci:
De cette façon, vous pouvez également ajouter directement les propriétés de la carte, comme le
add('abc','xyz')
va ajouter une nouvelle cléabc
à la carte avec la valeurxyz
.@JsonIgnore
doit être appliquée.Il y a actuellement un une question ouverte à la Jackson projet, afin de permettre un soutien pour
@JsonUnwrapped
sur les Cartes. Il n'est pas identifié comme étant dans la prochaine version 2.10 ou 3.x versions de Jackson, de sorte qu'il n'a pas l'air comme il est sur le court terme sur la fonction de feuille de route.Jusqu'à ce que cette fonctionnalité est prise en charge, la solution de contournement sur l'utilisation de
@JsonAnySetter
/@JsonAnyGetter
proposé dans une autre réponse semble être la voie à suivre.