Ich habe ein Benutzerobjekt, das zum und vom Server gesendet wird. Wenn ich das Benutzerobjekt versende, möchte ich das Hash-Passwort nicht an den Client senden. Also habe ich @JsonIgnore
die Kennworteigenschaft hinzugefügt , aber dies verhindert auch, dass sie in das Kennwort deserialisiert wird, was es schwierig macht, Benutzer anzumelden, wenn sie kein Kennwort haben.
Wie kann ich mich nur @JsonIgnore
für die Serialisierung und nicht für die Deserialisierung bewerben? Ich verwende Spring JSONView, daher habe ich nicht viel Kontrolle über das ObjectMapper
.
Dinge, die ich versucht habe:
@JsonIgnore
Zur Eigenschaft hinzufügen- Fügen Sie
@JsonIgnore
nur die Getter-Methode hinzu
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Um dies zu erreichen, benötigen wir lediglich zwei Anmerkungen:
@JsonIgnore
@JsonProperty
Verwenden Sie
@JsonIgnore
für das Klassenmitglied und seinen Getter sowie@JsonProperty
für seinen Setter. Eine Beispielillustration würde dazu beitragen:quelle
Seit Version 2.6: Eine intuitivere Möglichkeit ist die Verwendung der
com.fasterxml.jackson.annotation.JsonProperty
Anmerkung auf dem Feld:Selbst wenn ein Getter vorhanden ist, wird der Feldwert von der Serialisierung ausgeschlossen.
JavaDoc sagt:
Wenn Sie es umgekehrt brauchen, verwenden Sie es einfach
Access.READ_ONLY
.quelle
In meinem Fall hat Jackson Objekte, die ich von einem Spring MVC-Controller zurückgebe, automatisch (de) serialisiert (ich verwende @RestController mit Spring 4.1.6). Ich musste verwenden,
com.fasterxml.jackson.annotation.JsonIgnore
anstattorg.codehaus.jackson.annotate.JsonIgnore
, wie sonst, es tat einfach nichts.quelle
quelle
Eine andere einfache Möglichkeit, dies zu handhaben, besteht darin, das Argument
allowSetters=true
in der Anmerkung zu verwenden. Dadurch kann das Kennwort in Ihr dto deserialisiert werden, es wird jedoch nicht in einen Antworttext serialisiert, der ein enthaltenes Objekt verwendet.Beispiel:
Beide
foo
undbar
werden im Objekt ausgefüllt, aber nur foo wird in einen Antworttext geschrieben.quelle