Jackson benennt primitives boolesches Feld um, indem es 'is' entfernt
Könnte dies zu duplizieren. Aber ich finde nicht die Lösung.
Habe ich eine Klasse
public class MyResponse implements Serializable {
private boolean isSuccess;
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean isSuccess) {
this.isSuccess = isSuccess;
}
}
Getter und setter generiert von Eclipse.
In eine andere Klasse, ich habe den Wert auf true setzen, und schreiben Sie es als JSON-string.
System.out.println(new ObjectMapper().writeValueAsString(myResponse));
Im JSON-Format, der key kommt als {"success": true}
.
Ich soll den Schlüssel so isSuccess
selbst. Ist Jackson mit der setter-Methode während der Serialisierung? Wie man die Schlüssel der Feldname selbst?
InformationsquelleAutor der Frage iCode | 2015-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine etwas späte Antwort, aber es könnte nützlich sein, für alle anderen kommen auf diese Seite.
Eine einfache Lösung, um den Namen zu ändern, dass Jackson für die als JSON serialisiert wird, ist die Verwendung der @JsonProperty annotation, also dein Beispiel würde so Aussehen:
Wäre das serialisierte JSON als
{"isSuccess":true}
hat aber den Vorteil, nicht zu müssen, ändern Sie Ihre getter-Methode name.Beachten Sie, dass in diesem Fall könnten Sie auch schreiben Sie die annotation als
@JsonProperty("isSuccess")
da es nur die einzelnenvalue
elementInformationsquelleAutor der Antwort Scott
Ich habe vor kurzem lief in dieses Problem und das ist, was ich gefunden habe. Jackson wird untersuchen jede Klasse, die Sie passieren, um es für Getter und setter, und nutzen diese Methoden für die Serialisierung und Deserialisierung. Was folgt, "get", "ist" und "set" in den Methoden wird als Schlüssel für das JSON-Feld ("isValid" für getIsValid und setIsValid).
Ähnlich "isSuccess" wird zu "Erfolg", es sei denn, umbenannt in "isIsSuccess" oder "getIsSuccess"
Lesen Sie hier mehr: http://www.citrine.io/blog/2015/5/20/jackson-json-processor
InformationsquelleAutor der Antwort Utkarsha Padhye
Aufbauend auf Utkarsh Antwort..
Getter-Namen minus bekommen/ist wird als JSON name.
gespeichert ist, als { "harryPotter" : "whateverYouGaveHere" }
Für die Deserialisierung, Jackson prüft sowohl gegen die setter und der name des Feldes.
Für die Json-String { "wort1" : "Beispiel" }, die folgenden beiden sind gültig.
Eine weitere interessante Frage ist, in welcher Reihenfolge Jackson hält für die Deserialisierung. Wenn ich versuche zu Deserialisieren { "wort1" : "MeinName" } mit
Habe ich nicht getestet, die oben genannten, aber es wäre interessant zu sehen, wie die Werte von wort1 & wort2 ...
Hinweis: früher habe ich drastisch unterschiedliche Namen, um zu betonen, welche Felder erforderlich sind, zu gleichen.
InformationsquelleAutor der Antwort Abhinav Vishak
gibt es eine andere Methode für dieses problem.
definieren eine neue sub-Klasse erweitert PropertyNamingStrategy und übergeben es an ObjectMapper Instanz.
hier ist ein code-snippet kann Hilfe mehr:
InformationsquelleAutor der Antwort eric
Sollten Sie "Konfiguration hinzufügen", um die Jakson Objekt-mapper zum Beispiel:
InformationsquelleAutor der Antwort borino
Nahm ich @vels4j ist Beratung und es ist mein problem gelöst! Nicht nur die primitiven booleschen nun korrekt dargestellt (entnommen "wird" von "variable" Namen), das auch richtig funktioniert mit @JsonIgnore, weil ich nicht will, zu zeigen, dass es an den Aufrufer.
InformationsquelleAutor der Antwort logixplayer