提交 1fa4bca9 编写于 作者: R Ray Ryan

Allows spaces to appear in path parameters.

上级 59a7f867
package retrofit.http;
import com.google.gson.Gson;
import javax.inject.Named;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.message.BasicNameValuePair;
import retrofit.io.MimeType;
import retrofit.io.TypedBytes;
import javax.inject.Named;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
......@@ -181,7 +183,13 @@ final class HttpRequestBuilder {
}
}
if (found != null) {
replacedPath = doReplace(replacedPath, found.getName(), found.getValue());
String value;
try {
value = URLEncoder.encode(found.getValue(), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new AssertionError(e);
}
replacedPath = doReplace(replacedPath, found.getName(), value);
paramList.remove(found);
} else {
throw new IllegalArgumentException(
......
......@@ -12,6 +12,7 @@ import javax.inject.Named;
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Method;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.Set;
import java.util.UUID;
......@@ -26,7 +27,7 @@ public class HttpRequestBuilderTest {
}
};
public void testRegex() throws Exception {
@Test public void testRegex() throws Exception {
expectParams("");
expectParams("foo");
expectParams("foo/bar");
......@@ -77,6 +78,22 @@ public class HttpRequestBuilderTest {
assertThat(uri).isEqualTo(API_URL + "/foo/" + expectedId + "/bar?category=" + category);
}
@Test public void testGetWithPathParamAndWhitespaceValue() throws Exception {
Method method =
MyService.class.getMethod("getWithPathParam", String.class, String.class, Callback.class);
String expectedId = "I have spaces buddy";
String category = UUID.randomUUID().toString();
Object[] args = new Object[] {expectedId, category, new MyCallback()};
HttpUriRequest request = build(method, args);
assertThat(request).isInstanceOf(HttpGet.class);
HttpGet put = (HttpGet) request;
// Make sure the url param got translated.
final String uri = put.getURI().toString();
assertThat(uri).isEqualTo(API_URL + "/foo/" + URLEncoder.encode(expectedId, "UTF-8") + "/bar?category=" + category);
}
@Test public void testSingleEntityWithPathParams() throws Exception {
Method method =
MyService.class.getMethod("singleEntityPut", MyJsonObj.class, String.class, Callback.class);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册