JSON Mapper
JSON-Mapping für bestehende Objektgraphen und Domänenmodelle.
Die Idee
Eine Scala-3-Bibliothek zum Serialisieren und Deserialisieren von Objektgraphen, auch in bereits vorhandene Instanzen. Sie unterstützt verschachtelte Graphen, strukturierte Bindung, Konverter und zusammengefasste Validierungsfehler.
Was es kann.
Aktualisierung vorhandener Objekte
JSON in ein bestehendes Domänenobjekt übernehmen, statt den ganzen Graphen zu ersetzen.
Verschachtelte Graphen
Beziehungen, Collections und gebräuchliche Domänenwerte abbilden.
Validierung
Strukturierte Fehler beim Binden eingehender Daten sammeln.
Installation
libraryDependencies += "com.anjunar" %% "json-mapper" % "1.1.3"
Paket: com.anjunar:json-mapper
Direkt loslegen.
json-mapper einbinden und JSON in einen neuen Typ oder einen vorhandenen Objektgraphen deserialisieren.
Ein verschachteltes Domänenobjekt
JSON-Felder werden dem annotierten DTO und seiner verschachtelten Adresse zugeordnet.
import com.anjunar.json.mapper.provider.DTO
import jakarta.json.bind.annotation.JsonbProperty
import scala.annotation.meta.field
class AddressDto extends DTO {
@(JsonbProperty @field) var city: String = null
}
class UserDto extends DTO {
@(JsonbProperty @field) var name: String = null
@(JsonbProperty @field) var address: AddressDto = null
}JSON in eine vorhandene Instanz übernehmen
Der Mapper aktualisiert den vorhandenen Graphen und validiert das Ergebnis; die Zielinstanz behält ihre Identität.
import com.anjunar.json.mapper.{EntityLoader, JsonMapper}
import com.anjunar.json.mapper.intermediate.JsonParser
import com.anjunar.scala.universe.TypeResolver
import jakarta.validation.Validation
import java.util.UUID
val user = new UserDto
user.address = new AddressDto
val validator = Validation.buildDefaultValidatorFactory().getValidator
val loader = new EntityLoader {
override def load(id: UUID, clazz: Class[?]): Any = null
}
val updated = JsonMapper.deserialize(
JsonParser.parse("{\"name\":\"Ada\",\"address\":{\"city\":\"Berlin\"}}"),
user,
TypeResolver.resolve(classOf[UserDto]),
null, // optional EntityGraph
loader,
[T] => (_: Class[T]) => null.asInstanceOf[T],
validator
).asInstanceOf[UserDto]
assert(updated eq user)
assert(user.address.city == "Berlin")Bewusst gestaltet.
Das Mapping in bestehende Instanzen erhält Identität und Beziehungen bei partiellen Aktualisierungen.
Mach es zu deinem Werkzeug.
Weiter entdecken.
Scala.js UI
Ein Scala-3- und Scala.js-UI-Framework für serverseitig gerenderte Anwendungen.
↗Hibernate DDL Manager
Kontrollierte Schemaentwicklung auf Basis von Hibernate-Metadaten.
↗Scala Universe
Eine aufgelöste Sicht auf JVM-Typen, Generics und Annotationen.
↗Scala JS Ember
Ein modularer Rich-Text-Editor auf Basis eines unveränderlichen Dokumentmodells.
↗Scala Reflect
Zur Compile-Zeit erzeugte Typmetadaten für JVM und Scala.js.
↗