2011-08-03 3 views
0

URLEncodedUtils.parse(uri, encoding)은 URL에서 언급 한 순서대로 매개 변수를 반환합니까? 중복 된 이름을 가진 매개 변수의 모든 값을 반환합니까?URLEncodedUtils.parse()가 순서를 유지합니까?

+4

함수의 [소스 코드] (http://www.docjar.com/html/api/org/apache/http/client/utils/URLEncodedUtils.java.html)를 살펴보면 160 이하), 그렇습니다. 그러나 구현 세부 사항에 의존해서는 안됩니다. 문서화되지 않은 경우에는 신뢰할 수 없습니다. – Jacob

+0

고마워요! 내가 받아 들일 수 있도록 답변으로 의견을 추가해 주시겠습니까? – adranale

답변

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에 매개 변수의 순서가 유지됩니다. 그러나 이것은 구현 세부 사항이며 문서화되지 않았으므로 경고없이 변경할 수 있습니다. 코드에서이 동작을 사용해서는 안됩니다.

0

목록을 반환하므로 이름 - 값 쌍을 순서대로 반환해야하며 중복 된 값을 반환해야합니다.

그러나 매개 변수의 순서에 의존하지 말고 매개 변수의 이름을 통해 액세스해야합니다. 복제본은 어쨌든 나쁠 것입니다. 즉 lang=en&lang=de은 무엇을 의미합니까? 목록이 필요하다면 languages=en,de 같은 것을하거나 더 나은 매개 변수 이름을 제공하는 것이 좋습니다.

+0

내 프로그램은 중복 및 매개 변수 순서를 처리해야합니다. – adranale

+0

@adranale 이유에 대해 자세히 설명해 주시겠습니까? 디자인에 문제가있을 수 있습니까? – Thomas

관련 문제