簡體   English   中英

如何匹配Akka HTTP中的所有路徑

[英]How to match all paths in Akka HTTP

大多數Akka HTTP示例顯示使用path定義Routes非常容易。

我從介紹性示例中得到以下(略微簡化),

val route =
  path("hello") {
    complete(
      HttpEntity(
        ContentTypes.`text/html(UTF-8)`,
        "<h1>Say hello to akka-http</h1>"))
  }

但是,上面只適用於“/ hello”,我想匹配所有可能的路徑或URL,而不僅僅是“你好”。 空字符串""僅匹配根路徑, "*"匹配文字路徑“/ *”。 path的參數是必需的,不能簡單地省略。

有很多方法可以實現。 我相信以下顯示了一些最優先選擇的方式。

使用其他類型的指令

最簡單的解決方案需要知道Route可以是任何指令 ,而不僅僅是路徑指令 因此,可以通過完全刪除path來修改原始示例以實現所需的結果:

val route =
  complete(
    HttpEntity(
      ContentTypes.`text/html(UTF-8)`,
      "<h1>Say hello to akka-http</h1>"))

使用帶path的其他PathMatcher

path實際上並不將String作為參數。 path("hello")實際上是隱式轉換后的pathPrefix(_segmentStringToPathMatcher("hello")) 使用PathMatcher類型的不同參數可以獲得所需的結果。

您可以使用Remaining部分。

val route =
  path(Remaining) { _ =>
    complete(
      HttpEntity(
        ContentTypes.`text/html(UTF-8)`,
        "<h1>Say hello to akka-http</h1>"))
  }

或者您可以使用正則表達式:

val route =
  path(".*".r) { _ =>
    complete(
      HttpEntity(
        ContentTypes.`text/html(UTF-8)`,
        "<h1>Say hello to akka-http</h1>"))
  }

以上兩個都使匹配成為可能,因此您有另外忽略的lambda參數。

使用pathPrefix("")而不是path("")

根據path空字符串的文檔"" ,它的行為有點像一個通配符,總是匹配一個字符串。 但是, path需要完全匹配(匹配消耗整個字符串),但空字符串只完全消耗空字符串。 由於pathPrefix只需要匹配字符串的開頭,而不是消耗整個字符串,因此以下工作原理:

val route =
  pathPrefix("") {
    complete(
      HttpEntity(
        ContentTypes.`text/html(UTF-8)`,
        "<h1>Say hello to akka-http</h1>"))
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM