2016-04-17 15 views
0

Ich versuche, eine HTML-Seite mit Spray zu bedienen. Es ist ziemlich einfach mit getFromResource und getFromResourceDirectory, aber ich muss auch einige Abfrage Parameter übergeben, so dass einige Javascript auf der Seite weiß, was zu tun ist. Ist das möglich ? Alle meine früheren Versuche bestand in dieser Art von DingenZeige statischen Inhalt mit Parametern mit Spray

val route = path("show-repo") { serveResourceWithParams(SHOW_REPO) } ~ getFromResourceDirectory("web") 
def serveWithParams(page: String, params: (String, String)*) = { 
    val url = page + (if (params.isEmpty) "" else "?") + params.map { case (k, v) => s"$k=$v" }.mkString("&") 
    getFromResource(url) 
} 

aber ich weiß jetzt, es war ein bisschen naiv

Antwort

1

ich einen neuen Fall der Klasse mit den Mitgliedern des Typs Array[Byte] und List[(String, String)] schaffen würde.

case class FileWithParams(file: Array[Byte], params: List[(String, String)]) 

Wenn Sie die Datei nicht wissen, sehr groß sein, können Sie es in einem Schuss lesen mit

FileUtils.readAllBytes 

Angenommen, Sie verwenden (die Sie benötigen Spray laufen) https://github.com/sirthias/parboiled/blob/master/parboiled-core/src/main/java/org/parboiled/common/FileUtils.java

Dann lesen Sie den Inhalt der Datei manuell, erstellen Sie die Fallklasse und marshall es wie Sie es normalerweise tun würden.

Natürlich wäre mein bevorzugter Weg, dies in zwei asynchrone Anfragen aufzuteilen und auf beide zu warten. Sie werden wahrscheinlich auf die Datei Route warten, um abzuschließen.

+0

Hallo, danke für deine Antwort. Ich bin mir nicht sicher, ob ich es verstehe. Wenn Sie * marshall sagen, wie Sie es normalerweise tun würden *, sprechen Sie von einer Serialisierung mit Json, weil dies der Rest meines Dienstes ist? Die Antwort muss in diesem Fall ein gültiger HTML-Code sein. Ich verstehe auch nicht Ihre eigenen Async-Anfragen. Getrennte Anfragen für was? Die Datei von einer Seite und was auf der anderen Seite? In meinem Fall sind die Parameter eine reine Parameterliste, die sofort zurückgegeben werden kann, ohne dass etwas verarbeitet werden muss. Vielen Dank im Voraus zur Klärung: p – Dici

+0

Ich habe im Grunde versucht, einen Pfad wie 'git-stats/[Besitzer]/[Repo]/[Operation]' zu analysieren, um 'git-stats/someHtmlFile.html? Repo = [Besitzer ]/[Repo] '. Anstatt dies zu tun, rufe ich jetzt meinen Spray-Service direkt auf, indem ich eine Abfragezeichenfolge verwende, und die Parameter werden einfach übergeben, das JS auf der zurückgegebenen Seite kann es gut lesen – Dici