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

akka-http pathEnd directive catches query string

根据 pathEnd 指令的文档:

Rejects the request if the unmatchedPath of the [[RequestContext]] is non-empty, or said differently: only passes on the request to its inner route if the request path has been matched completely.

但是:

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

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

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

谢谢

我正在使用 akka 2.4.4

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

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