Serialisieren
Ein Objekt wird über seine annotierten Properties zu JSON. Leere Werte fallen weg, und jedes Objekt sagt, was es ist.
Veränderbare Klassen mit @JsonbProperty
Nur Properties mit @JsonbProperty nehmen teil. In Scala muss die Annotation am Feld ankommen, daher die Meta-Annotation @field. DTO kennzeichnet eine Klasse als Objekt, in das der Mapper hinabsteigt.
serialize mit aufgelöstem Typ
Der Mapper arbeitet auf einer ResolvedClass aus scala-universe, die die generischen Typen von Collections und Maps kennt. Das letzte Argument erzeugt Hilfsobjekte wie Regeln; bei einfachen DTOs wird es nie aufgerufen.
Was geschrieben wird und was nicht
Die Ausgabe ist knapp und sagt nur das Nötige. Lies diese Regeln, bevor du dich darauf verlässt, dass ein Feld da ist.
Die Deserialisierung liest @type nicht; sie nutzt immer den deklarierten Typ der Property. Clients unterscheiden damit Objekte.