akka-http pathEnd指令捕获查询字符串

时间:2016-07-26 14:55:51

标签: scala akka akka-http

根据pathEnd指令的文档:

  

如果[[RequestContext]]的unmatchedPath是,则拒绝请求   非空的,或换句话说:只将请求传递给它   如果请求路径已完全匹配,则为内部路由。

可是:

val route = pathPrefix("prefix") {
      get {
        pathEnd {
          complete(HttpEntity("test\n"))
        }
      }
    }

捕获路径“/ prefix?something”或“/ prefix?something = z”等的GET请求......

这是正常行为吗?我怎么能拒绝上面的示例路径?

由于

我正在使用akka 2.4.4

1 个答案:

答案 0 :(得分:3)

这是正常行为。查询字符串不是请求路径的一部分,因此不匹配。要拒绝这些请求,您可以明确检查参数集是否为空:

val route =
  pathPrefix("prefix") {
    get {
      pathEnd {
        parameterSeq { params =>
          validate(params.isEmpty, "Parameters must be empty") {
            complete(HttpEntity("test\n"))
          }
        }
      }
    }
  }

Get("/prefix") ~> route ~> check {
  responseAs[String] shouldEqual "test\n"
}

Get("/prefix?something") ~> route ~> check {
  rejection shouldEqual ValidationRejection("Parameters must be empty")
}