Play Framework Routes 中的 Scala 反引号

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

我正在将 Ember.js 和 Play 用于单页 Web 应用程序,并以 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 准备好生产为止。你可以这样处理

别介意这个解决办法。在重新尝试之前忘记保存文件给了我一些虚假的希望。

最佳答案

这在 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

关于Play Framework Routes 中的 Scala 反引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303322/

相关文章:

Scala:处理元组返回值是否需要临时变量?

java - 如何在play框架中将字段设置为UNIQUE?

scala - 使用Scala从Spark中一列的一系列值中总结成一个新列

javascript - 访问嵌套组件中的父属性

javascript - 将事件从 Pixi.js 发送到 Ember 组件

ember.js - 支持 IE9 的 Ember CLI 应用程序中的 BaseURL

json - Play 2.1(scala) - 如何为 scala 枚举案例类编写 Format[T]

java - 玩java框架在应用程序启动时初始化变量

scala - Play /记录/打印响应正文/遍历枚举器/缓冲正文

scala - 使用 scala fs2 文件流从文件中删除过滤行