【问题标题】:Show static content with parameters with Spray使用 Spray 显示带有参数的静态内容
【发布时间】:2016-04-17 13:17:58
【问题描述】:

我正在尝试使用 Spray 提供 HTML 页面。使用getFromResourcegetFromResourceDirectory 相当容易,但我还需要传递一些查询参数,以便页面上的一些Javascript 知道该做什么。那可能吗 ?我之前的所有尝试都包括在这种事情上

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)
}

但我现在意识到这有点天真

【问题讨论】:

    标签: scala spray static-content


    【解决方案1】:

    我将创建一个包含Array[Byte]List[(String, String)] 类型成员的新案例类。

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

    如果你知道文件不会很大,你可以用

    一口气读完
    FileUtils.readAllBytes
    

    假设您正在使用(您需要运行 Spray)https://github.com/sirthias/parboiled/blob/master/parboiled-core/src/main/java/org/parboiled/common/FileUtils.java

    然后像往常一样手动读取文件内容、创建案例类并对其进行编组。

    当然,我首选的方法是将其拆分为两个异步请求并等待两者完成。无论如何,您可能会等待文件路由完成。

    【讨论】:

    • 您好,感谢您的回答。我不确定我明白了。当您说 像往常一样编组 时,您是在谈论序列化到 Json,因为这是我的其余服务所做的吗?在这种情况下,响应必须是有效的 HTML。我也不明白你对单独的异步请求的看法。单独请求什么?一侧的文件,另一侧的文件是什么?在我的例子中,参数只是一个可以立即返回的参数列表,不需要处理任何东西。感谢他们提前澄清:p
    • 我基本上是在尝试解析 git-stats/[owner]/[repo]/[operation] 之类的路径以返回 git-stats/someHtmlFile.html?repo=[owner]/[repo]。我现在没有这样做,而是使用查询字符串直接调用我的 Spray 服务,并且参数只是传递过来,返回页面上的 JS 可以很好地读取它
    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多