Zum Inhalt springen
Anjunar/ DOCS

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.

Vorbereitung

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.

scala
import com.anjunar.json.mapper.EntityLoader import jakarta.validation.Validation val validator = Validation.buildDefaultValidatorFactory().getValidator val loader: EntityLoader = (id, clazz) => entityManager.find(clazz, id) val inject = [T] => (clazz: Class[T]) => clazz.getDeclaredConstructor().newInstance()
Aufruf

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.

scala
import com.anjunar.json.mapper.JsonMapper import com.anjunar.json.mapper.intermediate.JsonParser import com.anjunar.scala.universe.TypeResolver val target = new UserDto target.address = new AddressDto JsonMapper.deserialize( JsonParser.parse("""{"name": "Updated User", "age": 35, "address": {"city": "Hamburg", "zipCode": "20095"}}"""), target, TypeResolver.resolve(classOf[UserDto]), null, loader, inject, validator ) println(target.name) // Updated User println(target.address.city) // Hamburg
Semantik

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.
Collections initialisieren

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.