2017-04-03 12 views
0

私はStringとしてパスパラメータを取得できる簡単なAPIを実装しようとしています。ここに私のテストコードは次のとおりです。Akka HttpはSegment PathMatcherの助けを借りて文字列値を取得します

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" 
     } 
    } 
    } 

} 

残念ながら第二の試験は、メッセージで失敗します。

"/ fooは[] GET" "[/どんな] GET/foo" という等しくなかった

誰私は間違って何をしているのか、ヒントを与えることができますか?

おかげ

答えて

2

これはあなたのコードが何をしようとするものである:

  • 一致プレフィックスとパスを/foo
  • 方法は、そうでない場合は"GET /foo"
  • 場合と完全GET、ある場合残りのパスは、一部のセグメントで始まり、s"GET /foo/$seg"
  • 01すべての条件が満たされているので

~演算子(/fooで始まり、GETである)、第一オペランドで停止します。より正確なものを第1オペランドとして渡したい場合や、最初のケースでPathEndを指定したい場合があります。

+0

ああ、ありがとう。 akka http docs :( –

+0

)を読んでいる間、このディテール(〜)を忘れてしまいました。歓迎します。 –

関連する問題