Compare commits
1
Commits
1.0.3
...
multiparam
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
450a3382cc |
No files matched your search
@@ -22,10 +22,10 @@ public class BaseStringExtractorImpl implements BaseStringExtractor
|
|||||||
|
|
||||||
private String getSortedAndEncodedParams(OAuthRequest request)
|
private String getSortedAndEncodedParams(OAuthRequest request)
|
||||||
{
|
{
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
Map<String, List<String>> params = new HashMap<String, List<String>>();
|
||||||
params.putAll(request.getQueryStringParams());
|
params.putAll(request.getQueryStringParams());
|
||||||
params.putAll(request.getBodyParams());
|
params.putAll(request.getBodyParams());
|
||||||
params.putAll(request.getOauthParameters());
|
params.putAll(MapUtils.toListMap(request.getOauthParameters()));
|
||||||
params = MapUtils.sort(params);
|
params = MapUtils.sort(params);
|
||||||
return URLUtils.percentEncode(URLUtils.formURLEncodeMap(params));
|
return URLUtils.percentEncode(URLUtils.formURLEncodeMap(params));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class Request
|
|||||||
|
|
||||||
private String url;
|
private String url;
|
||||||
private Verb verb;
|
private Verb verb;
|
||||||
private Map<String, String> bodyParams;
|
private Map<String, List<String>> bodyParams;
|
||||||
private Map<String, String> headers;
|
private Map<String, String> headers;
|
||||||
private String payload = null;
|
private String payload = null;
|
||||||
private Integer timeout = null;
|
private Integer timeout = null;
|
||||||
@@ -35,7 +35,7 @@ class Request
|
|||||||
{
|
{
|
||||||
this.verb = verb;
|
this.verb = verb;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.bodyParams = new HashMap<String, String>();
|
this.bodyParams = new HashMap<String, List<String>>();
|
||||||
this.headers = new HashMap<String, String>();
|
this.headers = new HashMap<String, String>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -108,7 +108,14 @@ class Request
|
|||||||
*/
|
*/
|
||||||
public void addBodyParameter(String key, String value)
|
public void addBodyParameter(String key, String value)
|
||||||
{
|
{
|
||||||
this.bodyParams.put(key, value);
|
if(bodyParams.get(key) != null)
|
||||||
|
{
|
||||||
|
bodyParams.get(key).add(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bodyParams.put(key, Arrays.asList(value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -131,18 +138,26 @@ class Request
|
|||||||
*
|
*
|
||||||
* @return a map containing the query string parameters
|
* @return a map containing the query string parameters
|
||||||
*/
|
*/
|
||||||
public Map<String, String> getQueryStringParams()
|
public Map<String, List<String>> getQueryStringParams()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
Map<String, List<String>> params = new HashMap<String, List<String>>();
|
||||||
String query = new URL(url).getQuery();
|
String query = new URL(url).getQuery();
|
||||||
if (query != null)
|
if (query != null)
|
||||||
{
|
{
|
||||||
for (String param : query.split("&"))
|
for (String param : query.split("&"))
|
||||||
{
|
{
|
||||||
String pair[] = param.split("=");
|
String pair[] = param.split("=");
|
||||||
params.put(pair[0], pair[1]);
|
String key = pair[0], value = pair[1];
|
||||||
|
if(params.get(key)!= null)
|
||||||
|
{
|
||||||
|
params.get(key).add(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
params.put(key, Arrays.asList(value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return params;
|
return params;
|
||||||
@@ -157,7 +172,7 @@ class Request
|
|||||||
*
|
*
|
||||||
* @return a map containing the body parameters.
|
* @return a map containing the body parameters.
|
||||||
*/
|
*/
|
||||||
public Map<String, String> getBodyParams()
|
public Map<String, List<String>> getBodyParams()
|
||||||
{
|
{
|
||||||
return bodyParams;
|
return bodyParams;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,22 +5,39 @@ import java.util.*;
|
|||||||
public class MapUtils
|
public class MapUtils
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final Map<String, String> sort(Map<String, String> map)
|
public static final Map<String, List<String>> sort(Map<String, List<String>> map)
|
||||||
{
|
{
|
||||||
Preconditions.checkNotNull(map, "Cannot sort a null object.");
|
Preconditions.checkNotNull(map, "Cannot sort a null object.");
|
||||||
|
|
||||||
Map<String, String> sorted = new LinkedHashMap<String, String>();
|
Map<String, List<String>> sorted = new LinkedHashMap<String, List<String>>();
|
||||||
for (String key : getSortedKeys(map))
|
for (String key : getSortedKeys(map))
|
||||||
{
|
{
|
||||||
|
if(map.get(key).size() > 1)
|
||||||
|
{
|
||||||
|
Collections.sort(map.get(key));
|
||||||
|
}
|
||||||
sorted.put(key, map.get(key));
|
sorted.put(key, map.get(key));
|
||||||
}
|
}
|
||||||
return sorted;
|
return sorted;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<String> getSortedKeys(Map<String, String> map)
|
private static List<String> getSortedKeys(Map<String, List<String>> map)
|
||||||
{
|
{
|
||||||
List<String> keys = new ArrayList<String>(map.keySet());
|
List<String> keys = new ArrayList<String>(map.keySet());
|
||||||
Collections.sort(keys);
|
Collections.sort(keys);
|
||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static final <T> Map<String, List<T>> toListMap(Map<String, T> map)
|
||||||
|
{
|
||||||
|
Preconditions.checkNotNull(map, "Cannot sort a null object.");
|
||||||
|
|
||||||
|
Map<String, List<T>> result = new HashMap<String, List<T>>();
|
||||||
|
for (Map.Entry<String, T> entry : map.entrySet())
|
||||||
|
{
|
||||||
|
result.put(entry.getKey(), Arrays.asList(entry.getValue()));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -16,18 +16,21 @@ public class URLUtils
|
|||||||
|
|
||||||
private static final String ERROR_MSG = String.format("Cannot find specified encoding: %s", UTF_8);
|
private static final String ERROR_MSG = String.format("Cannot find specified encoding: %s", UTF_8);
|
||||||
|
|
||||||
public static String formURLEncodeMap(Map<String, String> map)
|
public static String formURLEncodeMap(Map<String, List<String>> map)
|
||||||
{
|
{
|
||||||
Preconditions.checkNotNull(map, "Cannot url-encode a null object");
|
Preconditions.checkNotNull(map, "Cannot url-encode a null object");
|
||||||
return (map.size() <= 0) ? EMPTY_STRING : doFormUrlEncode(map);
|
return (map.size() <= 0) ? EMPTY_STRING : doFormUrlEncode(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String doFormUrlEncode(Map<String, String> map)
|
private static String doFormUrlEncode(Map<String, List<String>> map)
|
||||||
{
|
{
|
||||||
StringBuffer encodedString = new StringBuffer();
|
StringBuffer encodedString = new StringBuffer();
|
||||||
for (String key : map.keySet())
|
for (String key : map.keySet())
|
||||||
{
|
{
|
||||||
encodedString.append(percentEncode(key)).append(PAIR_SEPARATOR).append(percentEncode(map.get(key))).append(PARAM_SEPARATOR);
|
for(String value: map.get(key))
|
||||||
|
{
|
||||||
|
encodedString.append(percentEncode(key)).append(PAIR_SEPARATOR).append(percentEncode(value)).append(PARAM_SEPARATOR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return removeTrailingSeparator(encodedString);
|
return removeTrailingSeparator(encodedString);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,40 +9,42 @@ import org.junit.*;
|
|||||||
public class MapUtilsTest
|
public class MapUtilsTest
|
||||||
{
|
{
|
||||||
|
|
||||||
private Map<String, String> unsorted;
|
private Map<String, List<String>> unsorted;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup()
|
public void setup()
|
||||||
{
|
{
|
||||||
unsorted = new LinkedHashMap<String, String>();
|
unsorted = new LinkedHashMap<String, List<String>>();
|
||||||
unsorted.put("d", "fourth");
|
unsorted.put("d", Arrays.asList("fourth"));
|
||||||
unsorted.put("a", "first");
|
unsorted.put("a", Arrays.asList("first"));
|
||||||
unsorted.put("c", "third");
|
unsorted.put("c", Arrays.asList("third"));
|
||||||
unsorted.put("b", "second");
|
unsorted.put("b", Arrays.asList("second", "second_two", "second_one"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldSortMap()
|
public void shouldSortMap()
|
||||||
{
|
{
|
||||||
Map<String, String> sorted = MapUtils.sort(unsorted);
|
Map<String, List<String>> sorted = MapUtils.sort(unsorted);
|
||||||
List<String> values = new ArrayList<String>(sorted.values());
|
List<List<String>> values = new ArrayList<List<String>>(sorted.values());
|
||||||
assertEquals("first", values.get(0));
|
assertEquals("first", values.get(0).get(0));
|
||||||
assertEquals("second", values.get(1));
|
assertEquals("second", values.get(1).get(0));
|
||||||
assertEquals("third", values.get(2));
|
assertEquals("second_one", values.get(1).get(1));
|
||||||
assertEquals("fourth", values.get(3));
|
assertEquals("second_two", values.get(1).get(2));
|
||||||
|
assertEquals("third", values.get(2).get(0));
|
||||||
|
assertEquals("fourth", values.get(3).get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldNotModifyTheOriginalMap()
|
public void shouldNotModifyTheOriginalMap()
|
||||||
{
|
{
|
||||||
Map<String, String> sorted = MapUtils.sort(unsorted);
|
Map<String, List<String>> sorted = MapUtils.sort(unsorted);
|
||||||
assertNotSame(sorted, unsorted);
|
assertNotSame(sorted, unsorted);
|
||||||
|
|
||||||
List<String> values = new ArrayList<String>(unsorted.values());
|
List<List<String>> values = new ArrayList<List<String>>(unsorted.values());
|
||||||
assertEquals("fourth", values.get(0));
|
assertEquals("fourth", values.get(0).get(0));
|
||||||
assertEquals("first", values.get(1));
|
assertEquals("first", values.get(1).get(0));
|
||||||
assertEquals("third", values.get(2));
|
assertEquals("third", values.get(2).get(0));
|
||||||
assertEquals("second", values.get(3));
|
assertEquals("second", values.get(3).get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalArgumentException.class)
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ public class URLUtilsTest
|
|||||||
@Test
|
@Test
|
||||||
public void shouldPercentEncodeMap()
|
public void shouldPercentEncodeMap()
|
||||||
{
|
{
|
||||||
Map<String, String> params = new LinkedHashMap<String, String>();
|
Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
|
||||||
params.put("key", "value");
|
params.put("key", Arrays.asList("value"));
|
||||||
params.put("key with spaces", "value with spaces");
|
params.put("key with spaces", Arrays.asList("value with spaces"));
|
||||||
params.put("&symbols!", "#!");
|
params.put("&symbols!", Arrays.asList("#!"));
|
||||||
|
|
||||||
String expected = "key=value&key+with+spaces=value+with+spaces&%26symbols%21=%23%21";
|
String expected = "key=value&key+with+spaces=value+with+spaces&%26symbols%21=%23%21";
|
||||||
assertEquals(expected, URLUtils.formURLEncodeMap(params));
|
assertEquals(expected, URLUtils.formURLEncodeMap(params));
|
||||||
@@ -30,7 +30,7 @@ public class URLUtilsTest
|
|||||||
@Test
|
@Test
|
||||||
public void shouldReturnEmptyStringForEmptyMap()
|
public void shouldReturnEmptyStringForEmptyMap()
|
||||||
{
|
{
|
||||||
Map<String, String> params = new LinkedHashMap<String, String>();
|
Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
|
||||||
String expected = "";
|
String expected = "";
|
||||||
assertEquals(expected, URLUtils.formURLEncodeMap(params));
|
assertEquals(expected, URLUtils.formURLEncodeMap(params));
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ public class URLUtilsTest
|
|||||||
@Test(expected = IllegalArgumentException.class)
|
@Test(expected = IllegalArgumentException.class)
|
||||||
public void shouldThrowExceptionIfMapIsNull()
|
public void shouldThrowExceptionIfMapIsNull()
|
||||||
{
|
{
|
||||||
Map<String, String> nullMap = null;
|
Map<String, List<String>> nullMap = null;
|
||||||
URLUtils.formURLEncodeMap(nullMap);
|
URLUtils.formURLEncodeMap(nullMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user