如何在 Akka Http 中提取没有变量的路径?
How do extract path without variables in Akka Http?
我想获取不带变量的路径,比如有api/test/132/123
我想获取api/test
。最好的方法是什么?我可以通过使用路径指令 - pathPrefix
来完成这项工作吗?到目前为止,我可以想象这样的事情,例如,传递变量并将它们从字符串中删除。
class UriSpec extends WordSpecLike with Matchers with ScalatestRouteTest {
"Uri" should {
"remain without identifiers" in new Scope {
Get("/api/test/132/123") ~> testRoute ~> check {
status should be(OK)
responseAs[String] should be("/api/test")
}
}
}
private trait Scope extends Directives {
def testRoute: Route =
path("api" / "test" / LongNumber / LongNumber) { (n1, n2) =>
extractMatchedPath { path =>
complete(OK -> path.toString.replace(s"/$n1", "").replace(s"/$n2", ""))
}
}
}
}
感谢您的帮助。抱歉,我没有弄清楚如何使用现有指令,也没有找到现有解决方案。
您使用 pathPrefix
的想法是正确的。您可以使用它来处理基本路径,然后有一个单独的级别来处理变量,在两者之间提取当前匹配的路径:
def testRoute: Route =
pathPrefix("api" / "test") {
extractMatchedPath { basePath =>
path(LongNumber / LongNumber) { (n1, n2) =>
complete(OK -> basePath.toString)
}
}
}
这意味着您可以分离出基本路径,而无需删除可变部分。
我想获取不带变量的路径,比如有api/test/132/123
我想获取api/test
。最好的方法是什么?我可以通过使用路径指令 - pathPrefix
来完成这项工作吗?到目前为止,我可以想象这样的事情,例如,传递变量并将它们从字符串中删除。
class UriSpec extends WordSpecLike with Matchers with ScalatestRouteTest {
"Uri" should {
"remain without identifiers" in new Scope {
Get("/api/test/132/123") ~> testRoute ~> check {
status should be(OK)
responseAs[String] should be("/api/test")
}
}
}
private trait Scope extends Directives {
def testRoute: Route =
path("api" / "test" / LongNumber / LongNumber) { (n1, n2) =>
extractMatchedPath { path =>
complete(OK -> path.toString.replace(s"/$n1", "").replace(s"/$n2", ""))
}
}
}
}
感谢您的帮助。抱歉,我没有弄清楚如何使用现有指令,也没有找到现有解决方案。
您使用 pathPrefix
的想法是正确的。您可以使用它来处理基本路径,然后有一个单独的级别来处理变量,在两者之间提取当前匹配的路径:
def testRoute: Route =
pathPrefix("api" / "test") {
extractMatchedPath { basePath =>
path(LongNumber / LongNumber) { (n1, n2) =>
complete(OK -> basePath.toString)
}
}
}
这意味着您可以分离出基本路径,而无需删除可变部分。