2016-04-28 16 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