Play是否为queryString值命令提供任何保证?

时间:2015-06-17 15:28:38

标签: scala playframework playframework-2.0

我根据Request.queryString

在我的Scala 2.11.6,基于Play 2.3.8的项目中添加了通用扩展名
/**
 * The parsed query string.
 */
def queryString: Map[String, Seq[String]]

假设我有?param=A&param=B。查询返回A&的顺序B会影响计算结果。

A&的游戏保证顺序B'

换句话说,我是否需要明确处理查询参数的顺序,或者它是系统契约的一部分。

1 个答案:

答案 0 :(得分:3)

  

A&的游戏保证顺序乙

我不认为有关游戏中的参数顺序的明确保证(一般情况下)。

在我现在使用的版本(Play 2.3.8)中,Play似乎使用了Netty's QueryStringDecoder,它确实保持了值的顺序。

因此,使用/some/path?param=1&param=7&param=4之类的内容,queryString()将返回

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

但是没有人能保证你将来不会改变(无论是在Netty还是Play决定使用别的东西)。

如果你真的只是针对2.3.8,那么我认为你可以放心地假设订单被保留。如果您想使用其他Play版本,那么您可能希望明确使用2.3.8使用的Netty QueryStringDecoder版本:

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