我根据Request.queryString
/**
* The parsed query string.
*/
def queryString: Map[String, Seq[String]]
假设我有?param=A¶m=B
。查询返回A&的顺序B会影响计算结果。
A&的游戏保证顺序B'
换句话说,我是否需要明确处理查询参数的顺序,或者它是系统契约的一部分。
答案 0 :(得分:3)
A&的游戏保证顺序乙
我不认为有关游戏中的参数顺序的明确保证(一般情况下)。
在我现在使用的版本(Play 2.3.8)中,Play似乎使用了Netty's QueryStringDecoder,它确实保持了值的顺序。
因此,使用/some/path?param=1¶m=7¶m=4
之类的内容,queryString()
将返回
"param" -> ["1", "7", "4"]
但是没有人能保证你将来不会改变(无论是在Netty还是Play决定使用别的东西)。
如果你真的只是针对2.3.8,那么我认为你可以放心地假设订单被保留。如果您想使用其他Play版本,那么您可能希望明确使用2.3.8使用的Netty QueryStringDecoder
版本:
QueryStringDecoder qs = new QueryStringDecoder("/a?param=1¶m=7¶m=4");
Map<String, List<String>> queryString = qs.getParameters();