fix missing parameter key in service url when parameter value not provided.

This commit is contained in:
Yasuhiro Takada 2017-04-17 19:22:41 +09:00
parent f998bb07c3
commit 2f7729a892
2 changed files with 8 additions and 7 deletions

View File

@ -112,13 +112,14 @@ public final class URIBuilder {
final Charset utf8 = Charset.forName("UTF-8");
if (query != null && !query.isEmpty()) {
final List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
final String queryValue = URLDecoder.decode(query, utf8.name());
final String[] parametersArray = queryValue.split("&");
final String[] parametersArray = query.split("&");
for (final String parameter : parametersArray) {
final String[] parameterCombo = parameter.split("=");
if (parameterCombo.length == 2) {
list.add(new BasicNameValuePair(parameterCombo[0], parameterCombo[1]));
if (parameterCombo.length >= 1) {
final String key = URLDecoder.decode(parameterCombo[0], utf8.name());
final String val = parameterCombo.length == 2 ? URLDecoder.decode(parameterCombo[1], utf8.name()) : "";
list.add(new BasicNameValuePair(key, val));
}
}
return list;

View File

@ -280,7 +280,7 @@ public class URIBuilderTests {
@Test
public void parse() {
URIBuilder builder = new URIBuilder()
.digestURI(URI.create("http://apache.org/shindig?foo=bar%26baz&foo=three#blah"));
.digestURI(URI.create("http://apache.org/shindig?foo=bar%26baz&foo=three%3Dbaz#blah"));
assertEquals("http", builder.getScheme());
assertEquals("apache.org", builder.getHost());
@ -288,8 +288,8 @@ public class URIBuilderTests {
List<URIBuilder.BasicNameValuePair> list = builder.getQueryParams();
for (URIBuilder.BasicNameValuePair pair : list) {
assertEquals(pair.getName(), "foo");
assertTrue(pair.getValue().equals("three") || pair.getValue().equals("bar"));
assertEquals("foo", pair.getName());
assertTrue(pair.getValue().equals("three=baz") || pair.getValue().equals("bar&baz"));
}
assertEquals(list.size(), 2);
assertEquals("blah", builder.getFragment());