如何在喷涂路由中解析获取请求参数?

Kev*_*lin 14 scala httprequest akka spray

这就是代码部分的样子

    get{
      respondWithMediaType(MediaTypes.`application/json`){
          entity(as[HttpRequest]){
            obj => complete{


                println(obj)
                "ok"
            }
          }
      }
    }~
Run Code Online (Sandbox Code Playgroud)

我可以将请求映射到一个spray.http.HttpRequest对象,我可以从这个对象中提取uri但我想有一种更简单的方法来解析get请求中的参数而不是手动执行.

例如,如果我的获取请求是

 http://localhost:8080/url?id=23434&age=24
Run Code Online (Sandbox Code Playgroud)

我希望能够从这个请求中获得id和年龄

4le*_*x1v 30

实际上你可以做得更好.在路由中有两个指令:parameter并且parameters,我猜差别很明显,你也可以使用一些修饰符:!?.如果是!,则表示必须提供此参数或拒绝请求并?返回选项,因此您可以在此情况下提供默认参数.例:

val route: Route = {
  (path("search") & get) {
    parameter("q"!) { query =>
      ....
    }
  }
}

val route: Route = {
  (path("search") & get) {
    parameters("q"!, "filter" ? "all") { (query, filter) => 
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @ecoe实际上你是对的,这个样本是错误的,因为你需要为`!`提供一个必需的值,比如``q!"默认"`,这是必需的.我相信这是你的问题 (2认同)