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
我正在使用 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
处理它的唯一选择?
更新:(稍作改动即可解决)
别管那个变通办法了。在重新尝试之前忘记保存文件给了我一些错误的希望。
这在 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