2011-08-03 10 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

関連する問題