In bestehende Objekte schreiben
JSON wird in die übergebene Instanz geschrieben. Verschachtelte Objekte werden dort aktualisiert, wo sie sind, Collection-Elemente über die ID zugeordnet.
Drei Mitspieler
deserialize braucht einen Bean-Validation-Validator, einen EntityLoader für Referenzen und eine inject-Funktion, die Hilfsobjekte erzeugt. Lege sie einmal an und verwende sie wieder.
Parsen, dann übernehmen
JsonParser macht aus Text die JSON-Knoten des Mappers. deserialize schreibt jede Property, die im JSON vorkommt, ins Ziel und gibt es zurück.
Was Übernehmen je Art der Property heißt
Eine Property, die im JSON fehlt, bleibt, wie sie ist. Eine Property mit null wird geleert. Alles andere hängt vom Typ ab.
- value (String, Int, UUID, …)
- Durch den JSON-Wert ersetzt.
- object (DTO)
- Ein vorhandenes Objekt wird an Ort und Stelle aktualisiert. Fehlt es, wird eine "id" über den EntityLoader gesucht; sonst entsteht eine neue Instanz über den parameterlosen Konstruktor.
- java.util.Collection
- Enthält danach genau die Elemente aus dem JSON. Elemente, deren "id" zu einem vorhandenen passt, werden aktualisiert statt ersetzt; fehlende entfernt.
- java.util.Map
- Geleert und mit den Einträgen des JSON gefüllt.
- id
- Wird nie geschrieben. Identität darf ein Client nicht ändern.
Collection- und Map-Properties müssen vor der Deserialisierung eine Instanz halten; der Mapper füllt sie, legt sie aber nie an. Eine null-Collection ist eine IllegalStateException.