具有正则表达式的Http Akka路线未编译

时间:2016-07-14 10:27:48

标签: regex scala url-routing akka-http

我正在使用Http Akka和Scala。 我有这条路线:

?- head(3).
[ (one,50,40), (two,80,70), (three,100,55), (four,50,45), (five,50,40), (six,80,70), (seven,100,55), (eight,50,45)]
------ 1 ---------
false.

出于某种原因,它没有使用此错误进行编译:

object Route {
  val route =

    path("items" / "card" / """\w+""".r) {
      get {
        complete {
          EntitiesData.someEntity
        }
      }
    }
}

当我删除正则表达式部分或将其更改为常规字符串时,似乎工作正常。

1 个答案:

答案 0 :(得分:3)

您需要将代码修改为:

object Route {
  val route =

    path("items" / "card" / """\w+""".r) { matched =>
      get {
        complete {
          EntitiesData.someEntity
        }
      }
    }
}

来自Akka PathMatcher DSL文档:

  

您可以将Regex实例用作匹配的PathMatcher1 [String]   无论正则表达式匹配并提取一个String值。一个   从正则表达式创建的PathMatcher提取   完全匹配(如果正则表达式不包含捕获组)或   捕获组(如果正则表达式只包含一个捕获组)。如果   正则表达式包含多个捕获组   将抛出IllegalArgumentException。

因此,当您在路径指令中使用正则表达式时,它会将匹配的部分传递到该指令下的部分。这就是您的代码中缺少的内容。