2016-04-28 20 views
1

检索多个值,我有以下网址:http://localhost/api/books/?bookId=21&bookId=62?authorId=2斯卡拉// Squeryl /播放来自同一PARAM

但我怎么能检索所有斯卡拉BOOKID值?

我使用的PlayFrameWork作为Web服务器,所以这里是我的代码:

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

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

params.get( “BOOKID”)只得到在BOOKID PARAMS的最后一个值。 e-g:。

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

感谢,

+1

的[您也可以在游戏框架的Web服务的参数列表]可能的复制(http://stackoverflow.com/questions/35814866/have- a-list-in-play-framework-web-service-parameters) – marcospereira

回答

1

如果你愿意更新routes文件,播放!可以提取和转换重复键变成你的一个数组:

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

将为您提供参数bookId: List[Int]在您的通话清晰度def show(bookId: List[Int], authorId: Int)

** UPDATE **

从使用播放规范,它应该:

“支持参数的几个查询字符串值”

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

问题是你正在改变着成Map[String, String]有:

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

v(0)需要每个参数

只需使用查询字符串的第一次出现Map直接:请求/api/books/?bookId=21&bookId=62?authorId=2request.queryString.get("bookId") wil升返回所有的BOOKID值,你可以遍历的Option[Seq[String]]

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

有没有办法改变路由,只是从字符串参数中检索值呢?一个参数就是这样的情况? e-g authorId?因为我将使用BookId参数使用IN子句在数据库中获取数据。谢谢 – user708683

+0

查看上面的更新^ – tgk

+0

那么我可以只有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)) – user708683