【问题标题】:Scala//Squeryl/Play Retrieve multiple values from the same paramScala//Squeryl/Play 从同一个参数中检索多个值
【发布时间】:2016-05-04 00:44:01
【问题描述】:

我有以下网址:http://localhost/api/books/?bookId=21&bookId=62?authorId=2

但是如何使用 Scala 检索所有 bookId 值?

我使用 PlayFrameWork 作为 WebServer,所以这是我的代码:

val params = request.queryString.map { case (k, v) => k -> v(0) }

System.out.print(params.get("bookId"));

params.get("bookId") 只获取 bookId 参数中的最后一个值。例如:62.

如何检索我的所有 bookId 参数?一旦我知道如何,我将能够将它们转换为整数。

谢谢,

【问题讨论】:

标签: scala playframework squeryl


【解决方案1】:

如果您愿意更新您的routes 文件,请玩!可以为您提取和转换重复的 Keys 为一个数组:

GET    /api/books    controllers.Books.show(bookId: List[Int], authorId: Id)

将为您提供参数bookId: List[Int] 以在您的调用定义def show(bookId: List[Int], authorId: Int) 中使用

** 更新 **

根据 Play 规范,它应该:

"支持一个参数的多个查询字符串值"

request.queryString 返回一个Map[String, Seq[String]]

问题是您将其转换为 Map[String, String]

val params = request.queryString.map { case (k, v) => k -> v(0) }

v(0) 取每个参数的第一次出现

只需直接使用 queryString Map:对于请求 /api/books/?bookId=21&bookId=62?authorId=2 request.queryString.get("bookId") 将返回您可以迭代的所有 bookId 值的 Option[Seq[String]]

request.queryString.get("bookId").map { bookIds: Seq[String] => *do something with book ids here * }

【讨论】:

  • 有办法避免改变路线,只从字符串参数中检索值吗?就像一个参数的情况一样?例如作者身份?因为我将使用 BookId 参数使用 IN 子句在数据库中获取。谢谢
  • 我可以只有 Map[String, Seq[String]] 然后在我没有数组时使用它吗?例如: val params = request.queryString.map { case (k, v) => k -> v } 然后以这种方式获取值: params.get('bookId') 和 params.get('authorId') ?因为最后我想要这样的东西: (a.authorId === params.get("authorId").?) 和 (params.get("bookId").map(bookIds: Seq[String] = > b.bookId in bookIds).getOrElse(1 === 1).inhibitWhen(false))
  • 这看起来不像 scala——这是 SQL DSL 吗?也许您可以发布一个新问题,理想情况下(如果我正在关注)您拥有的是您自己的存储库接口层,您可以查询作者和 bookId 列表,并且该列表的长度可能为 1+跨度>
  • 我正在使用 Scala 和 Squeryl。目标是获取 authorId 和 BookId 的值并在数据库中获取它们: where (a.authorId === params.get("authorId").?) 和 (params.get("bookId").map( b => b.bookIds in MyListofBookIds))) –
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 2018-05-26
  • 1970-01-01
  • 2013-02-28
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多