2016-06-27 7 views
0

Ich versuche, eine SQL-Abfrage über die auszuführen folgenden:Wie Sie eine normale SQL-Abfrage in akka ausführen JSON mit Spray und Postgres zurückzukehren

class ReportService(val databaseService: DatabaseService)(implicit executionContext: ExecutionContext) { 

    import databaseService._ 
    import databaseService.driver.api._ 
    import spray.json._ 

    def getNames(): Future[Seq[(Int, Int, Double, Double, String)]] = { 
    val setup = DBIO.seq(
     sql"select * from names".as[(Int, Int, Double, Double, String)] 
    ) 

    println(db.run(setup)) 
    db.run(setup) 
    } 
} 

Also habe ich diese an den Standardcode hinzugefügt für die Probe akka-http-rest

Dann habe ich eine Route:

val route = pathPrefix("reports") { 
    pathEndOrSingleSlash { 
     get { 
     complete(getNames().map(_.asJson)) 
     } 
    } 
} 

Wenn ich die Strecke laufen immer die JSON endet leer ist, obwohl es Elemente in der Tabelle sind.

Ich frage mich nur, wie man das eigentlich richtig macht, damit es funktioniert?

+0

Haben Sie ein Protokoll von Ihrer App oder Post bekommen Gres? – Qingwei

Antwort

0

Meiner Meinung nach weiß der Mapper nicht, wie man dieses Touple in JSON abbildet.

Ich würde Ihnen empfehlen serialize Methode zu erstellen, diese touple in Fallklasse konvertieren:

case class Name(arg1: Int, arg2: Int, arg3: Double, arg4: Double, arg5: String) 

def serialize(setup: (Int, Int, Double, Double, String)): Name = 
    Name(setup._1, setup._2, setup._3, setup._4, setup._5) 

eine implizite Konvertierung hinzufügen Name-JSON in Ihre Routen:

implicit val nameFormat = jsonFormat5(Name) 

Und schließlich aktualisieren Ihre Route zu:

complete(getNames().map(serialize)) 
+0

Gibt es eine Möglichkeit, die Erstellung einer Fallklasse zu vermeiden? Ich habe absichtlich ein Tupel verwendet, so dass ich Hunderte von Methoden für bestimmte SQL-Abfragen erstellen kann, die einfach als JSON zurückgegeben werden können. Kann ich das leicht machen? – Joe

+0

Mario, was ich vielleicht sagen möchte, ist, wenn ich eine getNames (Query) -Methode habe, wo ich jede Frage eingeben kann. kann ich das Ergebnis der Abfrage als Json erhalten? – Joe

+0

Wenn Sie spray-json verwenden, werden Tuple1 bis Tuple7 behandelt, sollte also nicht das Problem sein, und es sollte Fehler werfen, wenn es nicht wissen, wie man serialisiert – Qingwei