2016-04-27 14 views
1

のための暗黙のパスバインダーを再生し、私は私のコントローラは次のようにする必要があります:Scalaは、私はこのURL <code>/repo/:owner/:name</code>ため<code>PathBinder</code>を暗黙的に書きたい2つのパス変数

case class GitHubRepositoryId(owner: String, name: String) 
def get(repoId: GitHubRepositoryId) = {} 

それがものを書くことは可能ですか? play docsから解決策を見つけることができません。 QueryStringBindableのみがURLから複数の変数にアクセスし、それらからPOJOを構築することができます。それは手動で所有者と名前の間に/を解析しているようGET /repo/*repoId controllers.Controller.get(repoId: GitHubRespositoryId)

に事前

答えて

1

変更し、あなたのルートで

感謝はその後PathBindableを定義します。このような何か:

implicit val pathBinder = new PathBindable[GitHubRepositoryId] { 
    override def bind(key: String, value: String): Either[String, GitHubRepositoryId] = { 
    val parts = value.split('/') 
    if (parts.size != 2) { 
     Left("Not found") 
    } else { 
     Right(GitHubRepositoryId(parts(0), parts(1))) 
    } 
    } 

    override def unbind(key: String, repoId: GitHubRepositoryId): String = { 
    s"${repoId.owner}/${repoId.name}" 
    } 
} 
+0

は私が '/レポ/ * repoId/comments'のようなURLを持っている場合は、この解決策はまだ動作しますか? –

+0

はい、演劇で私のために行います2.3 – gregghz

関連する問題