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'
如何匹配网址前缀或忽略参数?
答案 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可能正确的做法是允许使用未使用的参数,但这个(当然是丑陋的)解决方案可行。