URLEncodedUtils.parse()是否保留顺序?

时间:2011-08-03 12:06:29

标签: java apache-httpclient-4.x

URLEncodedUtils.parse(uri, encoding)是否按照网址中提到的相同顺序返回参数? 它是否返回具有重复名称的参数的所有值?

2 个答案:

答案 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之类的事情或提供更好的参数名称。