根据pathEnd指令的文档:
如果[[RequestContext]]的unmatchedPath是,则拒绝请求 非空的,或换句话说:只将请求传递给它 如果请求路径已完全匹配,则为内部路由。
可是:
val route = pathPrefix("prefix") {
get {
pathEnd {
complete(HttpEntity("test\n"))
}
}
}
捕获路径“/ prefix?something”或“/ prefix?something = z”等的GET请求......
这是正常行为吗?我怎么能拒绝上面的示例路径?
由于
我正在使用akka 2.4.4
答案 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")
}