2016-04-17 7 views
0

Я пытаюсь обслуживать HTML-страницу с помощью Spray. Довольно легко использовать getFromResource и getFromResourceDirectory, но мне также необходимо передать некоторые параметры запроса, чтобы некоторые Javascript на странице знали, что делать. Это возможно ? Все мои предыдущие попытки состояла в такого рода вещиПоказать статический контент с параметрами с помощью 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) 
} 

, но теперь я понимаю, что это было немного наивно

ответ

1

Я хотел бы создать новый класс случай с членами типа Array[Byte] и List[(String, String)].

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

Если вы знаете, файл не будет огромным, вы можете прочитать его в одном кадре с

FileUtils.readAllBytes 

Предполагая, что вы используете (что вам нужно запустить спрей) https://github.com/sirthias/parboiled/blob/master/parboiled-core/src/main/java/org/parboiled/common/FileUtils.java

Затем вручную прочитайте содержимое файла, создайте класс case и выполните его, как обычно.

Конечно, мой предпочтительный способ состоял бы в том, чтобы разбить его на два запроса асинхронного вызова и дождаться завершения обоих. В любом случае вы, вероятно, будете ждать по пути к файлу.

+0

Привет, спасибо за ответ. Я не уверен, что я это понял. Когда вы говорите * маршалл, как обычно делаете *, вы говорите о сериализации для Json, потому что это то, что делает остальная часть моей службы? В этом случае ответ должен быть действительным HTML. Я также не понимаю вашу точку зрения на отдельные асинхронные запросы. Отдельные запросы на что? Файл с одной стороны и с другой стороны? В моем случае параметры - это простой список параметров, который может быть немедленно возвращен, не нужно ничего обрабатывать. Спасибо ir advance за разъяснение: p – Dici

+0

Я пытался вначале анализировать путь, например 'git-stats/[owner]/[repo]/[operation]', чтобы возвращать 'git-stats/someHtmlFile.html? Repo = [owner ]/[репо] '. Вместо этого я теперь напрямую вызываю службу Spray с помощью строки запроса, и параметры просто передаются, JS на возвращенной странице может читать ее просто отлично – Dici