Как извлечь путь без переменных в Akka Http? - PullRequest
0 голосов
/ 16 февраля 2020

I sh, чтобы получить путь без переменных, например, имея 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", ""))
        }
      }
  }
}

Спасибо за вашу помощь. Извините, мне не удалось выяснить, как использовать существующие директивы или найти существующее решение.

1 Ответ

1 голос
/ 16 февраля 2020

Ваша идея использовать pathPrefix была правильной. Вы можете использовать это для работы с базовым путем, а затем иметь отдельный уровень для работы с переменными, извлекая текущий совпавший путь между:

      def testRoute: Route =
         pathPrefix("api" / "test") {
            extractMatchedPath { basePath =>
               path(LongNumber / LongNumber) { (n1, n2) =>
                  complete(OK -> basePath.toString)
               }
            }
         }

Это означает, что тогда у вас будет выделен базовый путь без необходимости удалять переменные части.

...