URLEncodedUtils.parse(uri, encoding)是否按照网址中提到的相同顺序返回参数? 它是否返回具有重复名称的参数的所有值?
答案 0 :(得分:3)
public static void parse (
final List <NameValuePair> parameters,
final Scanner scanner,
final String encoding) {
scanner.useDelimiter(PARAMETER_SEPARATOR);
while (scanner.hasNext()) {
final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR);
if (nameValue.length == 0 || nameValue.length > 2)
throw new IllegalArgumentException("bad parameter");
final String name = decode(nameValue[0], encoding);
String value = null;
if (nameValue.length == 2)
value = decode(nameValue[1], encoding);
parameters.add(new BasicNameValuePair(name, value));
}
}
正如您在parse-function中所看到的,它保留了URL中参数的顺序。但这是一个实现细节而没有记录,所以它可以在没有警告的情况下进行更改。你真的不应该依赖代码中的那种行为。
答案 1 :(得分:0)
由于它返回一个列表,它应该按顺序返回名称 - 值对,并且还应该返回重复项。
但是,您不应该依赖参数的顺序,而应该通过它们的名称访问它们。
无论如何重复都是坏的,即lang=en&lang=de
意味着什么?如果您需要列表,最好做languages=en,de
之类的事情或提供更好的参数名称。