Scala//Squeryl/Play从同一参数检索多个值
我有以下网址:Scala//Squeryl/Play从同一参数检索多个值,scala,playframework,squeryl,Scala,Playframework,Squeryl,我有以下网址:http://localhost/api/books/?bookId=21&bookId=62?authorId=2 但是如何使用Scala检索所有bookId值呢 我使用PlayFrameWork作为Web服务器,下面是我的代码: val params = request.queryString.map { case (k, v) => k -> v(0) } System.out.print(params.get("bookId")); params.get(“
http://localhost/api/books/?bookId=21&bookId=62?authorId=2
但是如何使用Scala检索所有bookId值呢
我使用PlayFrameWork作为Web服务器,下面是我的代码:
val params = request.queryString.map { case (k, v) => k -> v(0) }
System.out.print(params.get("bookId"));
params.get(“bookId”)仅获取bookId参数中的最后一个值。例:62
如何检索所有bookId参数?一旦我知道怎么做,我就可以把它们转换成整数
谢谢,如果您愿意更新您的
路线
文件,请播放!可以提取重复的关键点并将其转换为数组:
GET /api/books controllers.Books.show(bookId: List[Int], authorId: Id)
将为您提供参数bookId:List[Int]
以用于呼叫定义def show(bookId:List[Int],authord:Int)
**更新**
根据播放规范,它应该:
“支持参数的多个查询字符串值”
request.queryString
返回一个Map[String,Seq[String]]
问题是您正在将其转换为一个映射[String,String],其中包括:
val params = request.queryString.map { case (k, v) => k -> v(0) }
v(0)
取每个参数的第一个匹配项
直接使用queryStringMap
:对于请求/api/books/?bookId=21&bookId=62?authorId=2
请求。queryString.get(“bookId”)
将返回所有bookId值的选项[Seq[String]
,您可以对其进行迭代:
request.queryString.get("bookId").map { bookIds: Seq[String] => *do something with book ids here * }
为了避免更改路由而只从字符串参数中检索值,是否可能存在重复?就像一个情妇的情况一样?e-g作者?因为我将使用BookId参数使用in子句获取数据库。谢谢,我只有Map[String,Seq[String]],然后在我没有数组的时候使用它?例如:val params=request.queryString.map{case(k,v)=>k->v},然后通过以下方式获取值:params.get('bookId')和params.get('authoritd')?因为在最后我想要这样的东西:(a.authorId==params.get(“authorId”)。?)和(params.get(“bookId”).map(bookIds:Seq[String]=>bookIds中的b.bookId)。getOrElse(1==1)。inhibitationwhen(false))看起来不像scala——这是SQL DSL吗?也许你可以发布一个新的问题,理想情况下(如果我在下面)你拥有的是你自己的存储库接口层,你可以查询一个作者和一个BookID列表,这个列表的长度可以是1+我正在使用Scala和Squeryl。目标是获取authorId和BookId的值并在数据库中获取它们:其中(a.authorId==params.get(“authorId”)。?)和(params.get(“BookId”).map(b=>MyListofBookIds中的b.bookIds))–