Bei einer Person
Klasse mit einem 'intelligenten Konstruktor', dh nur "gültig" Werte in Person#build
ein Person
werden konstruieren hat:Definition Liest [X], wobei X Privaten Constructor
case class Person private(age: Int)
object Person {
def build(age: Int): Option[Person] =
if (age >= 0 && age <= 125) Some(Person(age)) else None
}
ich ein Reads[Person]
erstellt, indem es in die Person
‚s Begleitobjekt:
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val reads: Reads[Person] =
(__ \ 'age).read[Int].map(a =>
Person.build(a).getOrElse(throw new RuntimeException("invalid age")
)
gibt es einen besseren Weg? Ich würde es vorziehen, die Ausnahme zu vermeiden, wenn es möglich ist.
Warum verwenden Sie keine Fallklasse Person (Alter: Int) {require (Alter> = 0 && Alter <= 125, "ungültiges Alter")}? – Simon
Um Ausnahmen zu vermeiden, d. H. Monaden über Ausnahmen verwenden –
Was ist mit der Definition der Reads im Companion-Objekt? – pedrofurla