I suggest renaming
UriBuilder replaceQueryParams(String query);
to
UriBuilder replaceQuery(String query);
or (better still) to
UriBuilder query(String query);
It seems trivial but it is sort of important as query parameters need different %-escaping than a whole query.
queryParam(String name, Object… values) should %-escape ‘=’ and ‘&’ in the name, and ‘&’ in the values (and similarly for any referenced placeholder variable values). replaceQueryParam(String, Object…) should behave the same.
replaceQueryParams(String), however, should not %-escape ‘=’ or ‘&” in its argument or (it follows) in placeholder variable values it references.
For instance,
UriBuilder.fromPath(“search”).replaceQueryParam(“q”, “{term}”).build(“Jack&Jill=water”)
-> “search?q=Jack%26Jill%3Dwater”
UriBuilder.fromPath(“search”).replaceQueryParams(“q={term}”).build(“Jack&Jill=water”)
-> “search?q=Jack&Jill=water”
Removing “Params” from the latter gives some hint that it is not equivalent to the former, in that it will not be careful to preserve any parameter structure.
UriBuilder.fromPath(“search”).query(“q={term}”).build(“Jack&Jill=water”)
-> “search?q=Jack&Jill=water”
James Manger