Meine Ausnahmeklasse sieht folgendermaßen aus, wenn sie mit Jackson serialisiert wurde, als ich versuchte, sie zu deserialisieren Die Mitglieder wurden "Nachricht" und "" benannt.restoreStatus", ich hatte erwartet, dass sie" Nachricht "sind und"Status".
Warum hat sich jackson dafür entschieden, meine Statusvariable als restoreStatus zu benennen? Wie funktionieren die Namenskonventionen von jackson / json?
@XStreamAlias("RestoreInProgressException")
public class RestoreInProgressException extends HostManagerException {
private static final long serialVersionUID = xxxx;
private RestoreStatus status;
@JsonCreator
public RestoreInProgressException(@JsonProperty("message") String message, @JsonProperty("status") RestoreStatus status) {
super(message, HttpStatus.SC_CONFLICT);
this.status = status;
}
public RestoreStatus getRestoreStatus() {
return this.status;
}
}
Antworten:
1 für die Antwort № 1Bitte sehen Sie diese Frage Jackson Feld basierte Serialisierung Hier finden Sie Informationen, wie der Serialisierungsalgorithmus in der Jackson-Bibliothek funktioniert. In deinem Beispiel hast du status
Eigentum aber getRestoreStatus
Getter-Methode. Jackson liest alle Getter-Methoden aus der Klasse und versucht sie zu serialisieren. Jackson fügt der Ausgabe auch JSON hinzu status
Eigenschaft, wenn Sie es mit kommentieren @JsonProperty
oder @JsonProperty("status")
. In diesem Fall enthält Ihre Ausgabe Jackson zwei Eigenschaften status
und restoreStatus
. Wenn du nur haben willst status
Eigenschaft in Ihrer Ausgabe-JSON müssen Sie:
I. Ändern Sie den Namen der Getter-Methode in getStatus
:
public RestoreStatus getStatus() {
return this.status;
}
II. Anmerkung hinzufügen @JsonProperty("status")
zu deiner Methode:
@JsonProperty("status")
public RestoreStatus getRestoreStatus() {
return this.status;
}