Akka Http在Segment PathMatcher的帮助下检索字符串值

时间:2017-04-03 09:45:43

标签: scala akka akka-http

我正在尝试实现一个简单的API,我可以将路径参数作为String。这是我的测试代码:

class SimpleRouteTest extends WordSpec
  with Matchers
  with ScalatestRouteTest {

  val routes: Route = pathPrefix("foo") {
    get {
      complete("GET /foo")
    } ~
    pathPrefix(Segment) { seg =>
      get {
        complete(s"GET /foo/$seg")
      }
    }
  }

  "The routes should handle" should {
    "GET /foo correctly" in {
      Get("/foo") ~> routes ~> check {
        responseAs[String] shouldBe  "GET /foo"
      }
    }
    "GET /foo/any" in {
      Get("/foo/any") ~> routes ~> check {
        responseAs[String] shouldBe  "GET /foo/any"
      }
    }
  }

}

不幸的是,第二次测试失败并显示消息:

" GET / foo []"不等于" GET / foo [/ any]"

谁可以提示,我做错了什么?

由于

1 个答案:

答案 0 :(得分:2)

这是您的代码尝试执行的操作:

  • 将路径与前缀/foo
  • 匹配
  • 如果方法为GET,请填写"GET /foo"
  • 否则如果剩余路径以某个段seg开头,则以s"GET /foo/$seg"
  • 结束

~运算符在第一个操作数处停止,因为满足所有条件(以/foo开头并且是GET)。您可能希望将更精确的一个作为第一个操作数传递,或者在第一个操作中指定您需要PathEnd