[prev in list] [next in list] [prev in thread] [next in thread]
List: httpclient-commons-dev
Subject: Re: Since URIBuilder.setQuery is deprecated shouldn't clearQuery also be deprecated?
From: Oleg Kalnichevski <olegk () apache ! org>
Date: 2013-10-31 15:31:07
Message-ID: 1383233467.15547.22.camel () ubuntu
[Download RAW message or body]
On Thu, 2013-10-31 at 14:14 +0000, Jacob R Quant wrote:
> > On Wed, 2013-10-30 at 18:00 +0000, Jacob R Quant wrote:
> > > It seems like the preferred way to manipulate the query string associated with \
> > > a URI when using org.apache.http.client.utils.URIBuilder is using the \
> > > [set|clear|add]Parameter[s] methods rather than the setQuery and removeQuery \
> > > methods. However, while the setQuery method is deprecated the removeQuery \
> > > method is not. Is this an oversight or is there a specific reason for this? I \
> > > would like to understand their intended uses better.
> > > (snip)
> >
> > The reason for deprecation of the #setQuery method was its inconsistency of its \
> > contract with all other methods of the class. #setQuery expected input to be URL \
> > encoded whereas all other methods expect unescaped input. The choice was between \
> > changing the contract of the method and by doing so breaking pretty much every \
> > single application reliant on URIBuilder or method deprecation in favor of \
> > another method with slightly less intuitive name. So, one should be using \
> > [set|clear| add]Parameter[s] methods to work with query parameters and the \
> > #setCustomQueury method to set custom queries.
> > Hope this helps
> >
> > Oleg
>
> Oleg,
>
> Thank you for that explanation. The point about the URL encoding makes perfect \
> sense. So if I understand correctly #setCustomQuery is the replacement for \
> #setQuery.
Yes, it is.
> As for the clearing operation, one could use #clearQuery in both cases (parameters \
> or custom query), but there is also a #clearParameters method for naming \
> consistency. Please let me know if that is incorrect.
For the lack of better ideas, yes it is basically just for symmetry. The
only subtle difference is that #clearParameters will have no effect on
custom query if it is set.
Consider this example
---
URIBuilder builder = new URIBuilder();
builder
.addParameter("p1", "v2")
.addParameter("p2", "v2").setCustomQuery("I changed my mind");
System.out.println(builder.build());
builder
.clearParameters();
System.out.println(builder.build());
---
---
?I%20changed%20my%20mind
?I%20changed%20my%20mind
---
Oleg
> Jacob
> ****************************************************************************** \
> "This message and any attachments are solely for the intended recipient and may \
> contain confidential or privileged information. If you are not the intended \
> recipient, any disclosure, copying, use, or distribution of the information \
> included in this message and any attachments is prohibited. If you have received \
> this communication in error, please notify us by reply e-mail and immediately and \
> permanently delete this message and any attachments. Thank you." \
> ******************************************************************************
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
> For additional commands, e-mail: dev-help@hc.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic