忽略路线中的参数

时间:2014-07-29 16:32:10

标签: scala routing playframework-2.1

Play的一个好处是它没有规定你的URL格式。这很好,因为我正在移植一个应用程序,需要保留与旧URL的向后兼容性。

我希望匹配以/foo/bar开头的所有网址:

/foo/bar
/foo/bar/0
/foo/bar/1
/foo/bar/baz

我该怎么做?

我找不到太多文档。我找到1.2.7的旧文档说

  

您可以通过在尾部斜杠后添加问号来告诉Play您要匹配这两个网址。例如:

     

GET /clients/? Clients.index

     

URI模式除了该斜杠之外不能包含任何可选部分。

作为自己的特例,这有点好笑。 IDK还有多少,因为它不在当前的文档中。


我试过

GET     /foo/bar             Foo.bar
GET     /foo/bar/*unused     Foo.bar

GET     /foo/bar             Foo.bar
GET     /foo/bar/$unused<.*> Foo.bar

但编译失败。

  

编译错误[呼叫定义中缺少参数:未使用]


最后,我尝试重新定义Foo.bar以获取垃圾参数(默认为空字符串)。

GET     /foo/bar             Foo.bar
GET     /foo/bar/*unused     Foo.bar(unused)

GET     /foo/bar             Foo.bar
GET     /foo/bar/$unused<.*> Foo.bar(unused)

但它仍然无效。

  

冲突符号均来自档案'/home/paul/my-play-project/target/scala-2.10/src_managed/main/routes_reverseRouting.scala'


如何匹配网址前缀或忽略参数?

1 个答案:

答案 0 :(得分:1)

解决方案归功于@wingedsubmariner

GET     /foo/bar             Foo.bar
GET     /foo/bar/$unused<.*> Foo.barIgnoreUnused(unused)

object Foo {

  def bar = Ok("")

  def barIgnoreUnused(unused: String) = bar

}

令人惊讶的是,这似乎不起作用。

GET     /foo/bar$unused<.*> Foo.bar(unused)

Play可能正确的做法是允许使用未使用的参数,但这个(当然是丑陋的)解决方案可行。