2015-06-17 109 views
3

我加入通用擴展到我的斯卡拉2.11.6,播放2.3.8基於項目,基於Request.queryString播放是否爲queryString值順序提供任何保證?

/** 
* The parsed query string. 
*/ 
def queryString: Map[String, Seq[String]] 

可以說我有?param=A&param=B。查詢返回A & B的順序影響計算結果。

是否擔保A & B?

換句話說,我是否需要明確處理查詢參數的順序,或者它是系統合同的一部分。

+0

即使打保證,是能夠保證所有的查詢字符串參數的順序將是請求url中相同? – Adi

+0

顯然不能保證查詢參數的順序?a = A&b = B&a = C&?a = A&a = C&b = C將會返回相同的Map,並且無法判斷b是否在last a之前或之後都。對我而言,這並不重要,只有A和A的順序非常重要。 – mavarazy

+0

'地圖'是無序的,他們不是? –

回答

3

是否擔保A & B?

我並不認爲Play中的params順序有明確的保證(一般來說)。

在我現在使用的版本(Play 2.3.8)中,Play似乎使用Netty's QueryStringDecoder,它確實保持了值的順序。

所以喜歡的東西/some/path?param=1&param=7&param=4queryString()將返回

"param" -> ["1", "7", "4"] 

,但沒有人可以向你保證這不會改變未來(在Netty中,或者播放決定使用別的東西)。

如果你真的只是瞄準2.3.8,那麼我認爲你可以放心地假定訂單保持不變。如果您想使用其他播放的版本,那麼你可能想通過2.3.8明確地使用使用的Netty QueryStringDecoder版本:

QueryStringDecoder qs = new QueryStringDecoder("/a?param=1&param=7&param=4"); 
Map<String, List<String>> queryString = qs.getParameters(); 
相關問題