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;
}
}
Pendant que je sérialise le 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 un résultat comme celui-ci:
{"map":{"key2":"value2","key1":"value1"},"name":"suren"}
mais
{"key2":"value2","key1":"value1","name":"suren"}
est attendu par le JacksonFeatureUnwrapping documentation . Pourquoi ne reçois-je pas le résultat déballé?
@JsonUnwrapped
Ne fonctionne pas pour les cartes, uniquement pour les POJO appropriés avec des getters et des setters. Pour les cartes, vous devez utiliser @JsonAnyGetter
et @JsonAnySetter
(disponible en version jackson> = 1.6).
Dans votre cas, essayez ceci:
@JsonAnySetter
public void add(String key, String value) {
map.put(key, value);
}
@JsonAnyGetter
public Map<String,String> getMap() {
return map;
}
De cette façon, vous pouvez également ajouter directement des propriétés à la carte, comme add('abc','xyz')
ajoutera une nouvelle clé abc
à la carte avec la valeur xyz
.
Il y a actuellement un n problème ouvert au projet Jackson pour permettre le support de @JsonUnwrapped
sur Maps. Il n'est pas marqué comme étant dans les prochaines versions 2.10 ou 3.x de Jackson, il ne semble donc pas qu'il se trouve sur la feuille de route des fonctionnalités à court terme.
Tant que cette fonctionnalité n'est pas prise en charge, la solution de contournement concernant l'utilisation de @JsonAnySetter
/@JsonAnyGetter
proposé dans autre réponse semble être la voie à suivre.