Warum bin ich nicht in der Lage, ändern und serialisieren eines Java-Karte, mit der Jackson Java-Bibliothek?
Meine Bohne sieht wie folgt aus:
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;
}
}
Während ich mit der Serialisierung der bean mit dem folgenden code:
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));
Ich bin immer Ergebnis wie dieses:
{"map":{"key2":"value2","key1":"value1"},"name":"suren"}
aber
{"key2":"value2","key1":"value1","name":"suren"}
wird voraussichtlich pro die JacksonFeatureUnwrapping Dokumentation. Warum bekomme ich nicht die ausgepackten Ergebnis?
Du musst angemeldet sein, um einen Kommentar abzugeben.
@JsonUnwrapped
funktioniert nicht für Karten, nur für die ordnungsgemäße POJOs mit Getter und setter. Für Karten, die Sie verwenden sollten@JsonAnyGetter
und@JsonAnySetter
(erhältlich in der jackson-version >= 1.6).In deinem Fall, versuchen Sie dies:
Diese Weise, können Sie auch direkt Eigenschaften hinzufügen, um die Karte, wie
add('abc','xyz')
wird fügen Sie einen neuen Schlüsselabc
auf der Karte mit Wertxyz
.@JsonIgnore
angewendet werden sollte.Gibt es derzeit eine eine offene Frage in der Jackson-Projekt zu ermöglichen Unterstützung für
@JsonUnwrapped
auf Karten. Es ist nicht tagged, die in der kommenden 2.10 oder 3.x-Versionen von Jackson, so dass es nicht so Aussehen, wie es auf den near-term-feature-roadmap.Bis diese Funktion unterstützt wird, ist die Problemumgehung über die Verwendung
@JsonAnySetter
/@JsonAnyGetter
vorgeschlagen eine andere Antwort scheint der Weg zu gehen.