HttpClient 4.3.1的org.apache.http.client.utils.URIBuilder中`removeQuery()`和`clearParameters()`有什么区别?

时间:2013-10-29 20:54:52

标签: java apache-httpclient-4.x

在我看来,这两种方法(URIBuilder.removeQueryURIBuilder.clearParameters)完全相同,所以我不确定为什么有两种选择。我应该在什么情况下使用其中一个?

我注意到相应的URIBuilder.setQuery方法已被标记为已弃用,而有利于URIBuilder.setParameters,但URIBuilder.removeQuery不是。dev mailing list。我错误地认为也许应该是这样吗?

更新 Oleg在{{3}}上提供了以下解释:

  

#setQuery方法弃用的原因是它的不一致   它与该类所有其他方法的合同。预期#setQuery   输入是URL编码而所有其他方法都是未转义的   输入。选择是在改变方法的合同和之间   这样做几乎打破了每一个依赖的应用程序   URIBuilder或方法弃用有利于另一种方法   名字稍微不那么直观。所以,应该使用[set | clear |   add]参数[s]方法使用查询参数和#setCustomQueury   设置自定义查询的方法。

1 个答案:

答案 0 :(得分:2)

嗯,如果你查看来源,确切的差异非常小:

public URIBuilder removeQuery() {
    this.queryParams = null;
    this.query = null; // <- this is the only difference
    this.encodedQuery = null;
    this.encodedSchemeSpecificPart = null;
    return this;
}

vs

public URIBuilder clearParameters() {
    this.queryParams = null;
    this.encodedQuery = null;
    this.encodedSchemeSpecificPart = null;
    return this;
}

因此,clearParameters将保留您的查询对象。