2016-04-03 2 views
0

Gibt es eine Möglichkeit, ein Feld basierend auf anderen Feld zu lesen?Play Framework - Cross Felder Lesen

Dies ist der Fall Klasse:

case class Person(children: List[String], hasChildren: Boolean) 

Ich möchte hasChildren auf der Kinder-Liste füllen basiert.

Also habe ich versucht, die folgenden Wortlaut:

implicit val personReads: Reads[Person] = (
    (JsPath \ "children").readNullable[List[String]].map(_.getOrElse(List())) and 
    (JsPath \ "hasChildren").read[Boolean](
    (JsPath \ "children").readNullable[List[String]].map{ 
     case Some(opt) => opt.nonEmpty 
     case None => false 
    })) 

Aber obwohl ich Kinder bieten passt es die None Fall und false zurück.

Was mache ich falsch? ist es möglich?

Antwort

1

Natürlich ist es möglich. Sie denken in die richtige Richtung (mit map). Ihr Leser muss

sein.

Sie müssen Reader mit Eigenschaften Reihenfolge und Typen wie Ihre Fallklasse implementieren. Die Namen der im Pfad verwendeten Eigenschaften sind nicht wichtig.

Wichtig:readNullable[T] Suche optionale oder Nullable-Feld bei JsPath (Feld nicht gefunden oder Null ist keine).