Ich bin nur Stunden in der Erforschung der Play Framework (2.5.1)
und ich bin verwirrt, warum Sie eine erstellen würden, Format
wenn Sie bereits definiert haben Reads
und Writes
. Haben Sie beim Definieren des Reads
und Writes
für Ihre Klasse nicht alle Funktionen definiert, die zum Konvertieren der Klasse von und nach erforderlich sind JsValue
?
Wie in der Play-Framework-Dokumentation hier erwähnt
Format [T] ist nur eine Mischung aus den Merkmalen Lesen und Schreiben und kann anstelle seiner Komponenten für die implizite Konvertierung verwendet werden.
Das Format ist eine Kombination aus Lesen [T] und Schreiben [T]. Sie können also ein einzelnes implizites Format [T] für Typ T definieren und es zum Lesen und Schreiben von Json verwenden, anstatt separate implizite Lesevorgänge [T] und Schreibvorgänge [T] für Typ T zu definieren. Wenn Sie also bereits Lesevorgänge [T] haben. und Schreibt [T], das für Ihren Typ T definiert ist, dann ist Format [T] nicht erforderlich und umgekehrt.
Ein Vorteil von Format besteht darin, dass Sie ein einzelnes implizites Format [T] für Ihren Typ T definieren können, anstatt zwei separate Lesevorgänge [T] und Schreibvorgänge [T] zu definieren, wenn beide symmetrisch sind (dh Lese- und Schreibvorgänge). Format macht Ihre JSON-Strukturdefinition also weniger repetitiv. Zum Beispiel können Sie so etwas tun
implicit val formater: Format[Data] = (
(__ \ "id").format[Int] and
(__ \ "name").format[String] and
(__ \ "value").format[String]
) (Data.apply, unlift(Data.unapply))
An Stelle von.
implicit val dataWriter: Writes[Data] = (
(__ \ "id").write[Int] and
(__ \ "name").write[String] and
(__ \ "file_type").write[String]
) (Data.apply)
implicit val dataWriter: Reads[Data] = (
(__ \ "id").read[Int] and
(__ \ "name").read[String] and
(__ \ "file_type").read[String]
) (unlift(Data.unapply))
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen