Skip to content

Commit 27bac50

Browse files
Added append parameters to URL method
1 parent 6fc5146 commit 27bac50

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

src/main/java/org/scribe/utils/URLUtils.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import org.scribe.exceptions.*;
88

99
/**
10-
* Utils to deal with URL and url-encodings
11-
*
10+
* Utils to deal with URL and url-encodings
11+
*
1212
* @author Pablo Fernandez
1313
*/
1414
public class URLUtils
@@ -17,6 +17,7 @@ public class URLUtils
1717
private static final String UTF_8 = "UTF-8";
1818
private static final char PAIR_SEPARATOR = '=';
1919
private static final char PARAM_SEPARATOR = '&';
20+
private static final char QUERY_STRING_SEPARATOR = '?';
2021

2122
private static final String ERROR_MSG = String.format("Cannot find specified encoding: %s", UTF_8);
2223

@@ -100,6 +101,25 @@ public static String percentDecode(String string)
100101
}
101102
}
102103

104+
/**
105+
* Append given parameters to the query string of the url
106+
*
107+
* @param url the url to append parameters to
108+
* @param params any map
109+
* @return new url with parameters on query string
110+
*/
111+
public static String appendParametersToQueryString(String url, Map<String, String> params)
112+
{
113+
Preconditions.checkNotNull(url, "Cannot append to null URL");
114+
String queryString = URLUtils.formURLEncodeMap(params);
115+
if (queryString.isEmpty()) return url;
116+
117+
// Check if there are parameters in the url already and use '&' instead of '?'
118+
url += url.indexOf(QUERY_STRING_SEPARATOR) != -1 ? PARAM_SEPARATOR : QUERY_STRING_SEPARATOR;
119+
url += queryString;
120+
return url;
121+
}
122+
103123
private static final class EncodingRule
104124
{
105125
private final String ch;

src/test/java/org/scribe/utils/URLUtilsTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,49 @@ public void shouldThrowExceptionIfStringToDecodeIsNull()
8282
URLUtils.percentDecode(toDecode);
8383
}
8484

85+
@Test(expected = IllegalArgumentException.class)
86+
public void shouldThrowExceptionWhenAppendingNullMapToQuerystring()
87+
{
88+
String url = "http://www.example.com";
89+
Map<String, String> nullMap = null;
90+
URLUtils.appendParametersToQueryString(url, nullMap);
91+
}
92+
93+
@Test
94+
public void shouldAppendNothingToQuerystringIfGivenEmptyMap()
95+
{
96+
String url = "http://www.example.com";
97+
Map<String, String> emptyMap = new HashMap<String, String>();
98+
String newUrl = URLUtils.appendParametersToQueryString(url, emptyMap);
99+
Assert.assertEquals(url, newUrl);
100+
}
101+
102+
@Test
103+
public void shouldAppendParametersToSimpleUrl()
104+
{
105+
String url = "http://www.example.com";
106+
String expectedUrl = "http://www.example.com?param1=value1&param2=value%20with%20spaces";
107+
108+
Map<String, String> params = new HashMap<String, String>();
109+
params.put("param1", "value1");
110+
params.put("param2", "value with spaces");
111+
112+
url = URLUtils.appendParametersToQueryString(url, params);
113+
Assert.assertEquals(url, expectedUrl);
114+
}
115+
116+
@Test
117+
public void shouldAppendParametersToUrlWithQuerystring()
118+
{
119+
String url = "http://www.example.com?already=present";
120+
String expectedUrl = "http://www.example.com?already=present&param1=value1&param2=value%20with%20spaces";
121+
122+
Map<String, String> params = new HashMap<String, String>();
123+
params.put("param1", "value1");
124+
params.put("param2", "value with spaces");
125+
126+
url = URLUtils.appendParametersToQueryString(url, params);
127+
Assert.assertEquals(url, expectedUrl);
128+
}
129+
85130
}

0 commit comments

Comments
 (0)