如何在 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)
               }
            }
         }

这意味着您可以分离出基本路径,而无需删除可变部分。