Play 框架路由中的 Scala 反引号

Scala backticks in Play Framework Routes

我正在使用 Ember.js 和 Play 作为单页网络应用程序,Play 作为 API。 Ember 像这样合并请求,?ids[]=401460&ids[]=379610。但是当我尝试在 Play 的路由文件中处理该值时,它实际上期望该值为 ids[] 而不是 ids。但我无法告诉路由文件查找 ids[],因为它会在 [ 上抛出错误。我试过像在 scala 代码本身 `ids[]` 中那样使用反引号,但这又会在路由文件中引发错误。

是否可以在路由文件中执行此操作?

GET /api/test      controllers.application.getTests(ids[]:List[Long]) 

我知道我可以这样处理,

 Map<String,String[]> params = request().body().asFormUrlEncoded();

但我更愿意让 Play 做它的事情并在路由文件中处理它然后传递值。

这是完全可能的还是使用 asFormUrlEncoded 处理它的唯一选择?

更新:(稍作改动即可解决)

在进一步使用它时,我偶然发现了一个事实,即即使我无法将它添加到路由文件中的查询字符串参数列表中,它仍然会传递给函数。 因此,如果您使用的是 Ember 或名称中与 [] 合并的其他一些 JS 库或框架,并且没有使用最新的 Play。不幸的是,这使得在读取路由文件时路由变得模棱两可,因为您无法判断它在期待一个值,但在 Play 2.5 准备好 Prod 之前它一直有效。你可以这样处理

别管那个变通办法了。在重新尝试之前忘记保存文件给了我一些错误的希望。

这在 Play 2 中似乎是不可能的。4.x。有 a test in RoutesFileParserSpec.scala 表明这是可能的:

"parse argument with complex name" in {
  parseRoute("GET /s p.c.m(`b[]`: List[String] ?= [])").call.parameters must_== Some(Seq(
    Parameter("`b[]`", "List[String]", None, Some("[]"))))
}

不过看来你得等 2.5.x。另请参阅此问题:https://github.com/playframework/playframework/issues/4693