Play 是否为 queryString 值顺序提供任何保证?
Does Play provide any guarantees for queryString values order?
我正在为基于 Scala 2.11.6、Play 2.3.8 的项目添加通用扩展,基于 Request.queryString
/**
* The parsed query string.
*/
def queryString: Map[String, Seq[String]]
假设我有 ?param=A¶m=B
。查询 returns A & B 影响计算结果的顺序。
play保证A&B顺序吗?
换句话说,我是否需要显式处理查询参数的顺序,或者它是系统契约的一部分。
Does play guarantee order of A & B?
我认为 Play 中参数的顺序没有明确的保证(一般而言)。
在我现在使用的版本(Play 2.3.8)中,Play似乎使用Netty's QueryStringDecoder并且它确实保持了值的顺序。
所以像 /some/path?param=1¶m=7¶m=4
这样的东西,queryString()
会 return
"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();
我正在为基于 Scala 2.11.6、Play 2.3.8 的项目添加通用扩展,基于 Request.queryString
/**
* The parsed query string.
*/
def queryString: Map[String, Seq[String]]
假设我有 ?param=A¶m=B
。查询 returns A & B 影响计算结果的顺序。
play保证A&B顺序吗?
换句话说,我是否需要显式处理查询参数的顺序,或者它是系统契约的一部分。
Does play guarantee order of A & B?
我认为 Play 中参数的顺序没有明确的保证(一般而言)。
在我现在使用的版本(Play 2.3.8)中,Play似乎使用Netty's QueryStringDecoder并且它确实保持了值的顺序。
所以像 /some/path?param=1¶m=7¶m=4
这样的东西,queryString()
会 return
"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();