2011-08-03 55 views
0

URLEncodedUtils.parse(uri, encoding)是否按照URL中提到的相同順序返回參數? 它是否會返回所有重名參數的值?URLEncodedUtils.parse()是否保存訂單?

+4

如果你看一下函數的[源代碼](http://www.docjar.com/html/api/org/apache/http/client/utils/URLEncodedUtils.java.html)(line 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)); 
    } 
} 

正如你可以在分析的功能看,它保留在URL中的參數的順序。但是這是一個實現細節,沒有記錄,所以它可以在沒有警告的情況下更改。你真的不應該在你的代碼中依賴這種行爲。

0

由於它返回一個列表,它應該按順序返回名稱 - 值對,並且還應該返回重複項。

但是,您不應該依賴參數的順序,而應該通過名稱訪問它們。 無論如何,重複會很糟糕,即lang=en&lang=de意味着什麼?如果你需要列表,你最好做一些像languages=en,de或提供更好的參數名稱。

+0

我的程序需要處理重複項和參數的順序。 – adranale

+0

@adranale能否詳細說明原因?設計可能有問題嗎? – Thomas