2017-02-24 5 views
0

Ich experimentiere mit Scala und Play herum. Ich möchte ein Tuple zurückgeben, in diesem Fall ein Tuple3, könnte aber Tuple beliebiger Größe sein. Ich möchte das Tupel als JSON serialisieren, aber Play scheint nicht zu wissen, wie man ein Tupel serialisiert.Play Framework Serial Tuple3

Ich bin nur versuchen, etwas sehr einfach wie folgt

def getClient(clientId: Int) = Action { 
    val result = ("I", "AM", "TUPLE") 
    Ok(Json.toJson(result)) 
} 

Kein Json Serializer für Typ (String, String, String) gefunden zu tun. Versuchen Sie ein implizites Schreiben oder Format für diesen Typ zu implementieren.

Ich habe so etwas versucht, aber es scheint nur auf Tuple2 zu funktionieren.

val seq = Seq[(String,String)](("attr1"->"val1"),("attr2"->"val2")) 


val s = Json.toJson(seq.map(e => Json.obj((e._1 -> e._2)))) 
Ok(s).as(JSON) 
+0

tun Warum wollen Sie eine Tuple3 als Json Rendre? Wie willst du deinen Json aussehen? Wenn Sie das wissen, können Sie Ihren eigenen impliziten Autor schreiben. Aber gibt es einen Grund, warum Sie keine Fallklasse verwenden möchten? – Simon

+0

Was ist, wenn meine Serviceklassenmethode Tuple (Client, Seq [Project]) zurückgibt, würde ich das als Json serialisieren wollen, um zum Client zurückzukehren. In Java würde ich sie einfach in ein DTO-Objekt einbinden. Sie fragen sich, ob Sie vielleicht dasselbe in Scala machen müssen. – greyfox

+1

Okay .. aber was JSON erwartest du genau? –

Antwort

1

Sie können eine Fallklasse wie diese erstellen.

case class MyCaseClass(string1: String, string2: String, string3: String) 

dann müssen Sie mit

implicit val myCaseClassFormat = Json.format[MyCaseClass] 

einen impliziten Schriftsteller hinzufügen, dann können Sie Json.toJson(MyCaseClass("I", "AM", "TUPLE"))

+0

Dies ist, was ich getan habe, den gleichen Ansatz, den ich mit Java nehme – greyfox