Jackson Dynamische Filterung von Eigenschaften, die bei der Deserialisierung
Habe ich einen REST WS zu aktualisieren, ein bean-Objekt erhält einen JSON-string als Eingabe.
ABean entity = svc.findEntity(...);
objectMapper.readerForUpdating(entity).readValue(json);
[...]
svc.save(entity);
ABean ist ein komplexer Typ, der auch andere Objekte z.B.:
class ABean {
public BBean b;
public CBean c;
public String d;
}
svc.save(...) sparen die Bohne und die eingebetteten Objekte.
Aus Gründen der Sicherheit möchte ich herausfiltern einige der Eigenschaften, die aktualisiert werden können, die durch den JSON-string, aber ich möchte dies dynamisch, so dass für jede WS (oder Benutzer-Rolle), kann ich entscheiden, welche Eigenschaften zu verhindern, dass aktualisiert werden (so kann ich nicht einfach die Jackson-Ansichten)
Zusammenfassen, gibt es eine Möglichkeit, ich kann es dynamisch filter-out-Eigenschaften während der Deserialisierung von JSON?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein anderer Weg ist mit BeanDeserializerModifier:
Können Sie sich registrieren und die modfier der ObjectMapper mit:
Dann die angegebenen Eigenschaften ignoriert werden. Sie können Sie ignorieren, der updateBuilder Methode, wenn Sie die @JsonAnySetter annotation.
Grüße,
Martin
Davon gehe ich aus deiner Beschreibung kann man nicht einfach die
@JsonIgnore
Anmerkung um zu verhindern, dass die Felder aus, die serialisiert werden, die in der jeweiligen Klasse.Blick auf die Verwendung Jakson mix-ins: mix-ins ermöglichen es Ihnen, zu ersetzen, eine Klasse definition - mit den notwendigen Anmerkungen - für die Datenbindung. Bei der Serialisierung können Sie wählen, einen bestimmten mix-in class definition stand in für die eigentliche Klasse, die serialisiert werden. Definieren Sie eine Reihe von mix-ins, um zu behandeln jeden Fall, dann wählen Sie die entsprechenden beim serialisieren einer bestimmten bean.
Können Sie @JsonIgnoreType zu ignorieren, eine java-Klasse/interface/enum aus serialisieren. Zusätzlich können Sie mit @JsonIgnoreProperties für das ignorieren einer Liste von Eigenschaften und @JsonIgnore für eine bestimmte Eigenschaft
Den meisten leistungsstarke, schnelle und einfache Lösung, die ich verwende, ist nur die Filterung der JsonNode Baum erhalten Sie von der Deserialisierung wird dann das gefilterte Ergebnis der readerForUpdating. Sowas: