Scala在Play Framework Routes中反击

时间:2015-12-16 03:10:17

标签: scala ember.js playframework playframework-2.4 scala-2.11

我正在使用Ember.js和Play播放单个网页应用,并将Play作为API。 Ember合并了这样的请求,?ids[]=401460&ids[]=379610。但是当我尝试在Play的路径文件中处理该值时,它实际上期望值为ids[]而不是ids。但是我无法告诉路由文件查找ids[],因为它会在[上抛出错误。我已经尝试过使用像我在scala代码本身`ids[]`中那样的返回刻度,但是这又会在routes文件中抛出错误。

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

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

我知道我可以这样管理它,

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

但我更愿意让Play执行它的操作并在路径文件中处理它然后关闭值。

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

更新(解决最小变化)

<德尔> 在玩弄它的时候,我偶然发现,即使我不能将它添加到路径文件中的查询字符串参数列表中,它仍会传递给函数。 因此,如果您正在使用Ember或其他JS库或Framework与名称中的[]结合,并且未使用最新的Play。不幸的是,这使得路线在读取路线文件时不明确,因为你不能告诉它期望一个值,但它的工作直到Play 2.5变为Prod准备好。你可以这样处理,

别介意这项工作。在重新尝试之前忘记保存文件给了我一些错误的希望。

1 个答案:

答案 0 :(得分:2)

看起来在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