diff --git a/app/src/androidTest/java/nuesoft/restfulpy/client/FormTest.java b/app/src/androidTest/java/nuesoft/restfulpy/client/FormTest.java index ca95067..6ec2d84 100644 --- a/app/src/androidTest/java/nuesoft/restfulpy/client/FormTest.java +++ b/app/src/androidTest/java/nuesoft/restfulpy/client/FormTest.java @@ -97,4 +97,52 @@ public void queryStringPost() { } } + @Test + public void urlEncodedPost() { + + Map payload = new HashMap<>(); + payload.put("item1", "value1"); + final CountDownLatch countDownLatch = new CountDownLatch(1); + restAdapter = new RestAdapter("http://10.0.2.2:33415/", Authenticator.getAuthenticator()); + restAdapter.request("echo", "post").setEncoding("urlencoded").addParameters(payload).send().then(result -> { + + Assert.assertEquals(result.getBody().replaceAll("\\s+", ""), "{\"item1\":\"value1\"}"); + countDownLatch.countDown(); + }).fail(result -> { + + result.printStackTrace(); + countDownLatch.countDown(); + }); + + try { + countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Test + public void multipartPost() { + + Map payload = new HashMap<>(); + payload.put("item1", "value1"); + payload.put("item2", "value2"); + final CountDownLatch countDownLatch = new CountDownLatch(1); + restAdapter = new RestAdapter("http://10.0.2.2:33415/", Authenticator.getAuthenticator()); + restAdapter.request("echo", "post").setEncoding("multipart").addParameters(payload).send().then(result -> { + + Assert.assertEquals(result.getBody().replaceAll("\\s+", ""), "{\"item1\":\"value1\",\"item2\":\"value2\"}"); + countDownLatch.countDown(); + }).fail(result -> { + + result.printStackTrace(); + countDownLatch.countDown(); + }); + + try { + countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } diff --git a/app/src/main/java/nuesoft/restfulpy/client/webService/Request.java b/app/src/main/java/nuesoft/restfulpy/client/webService/Request.java index d1db8e7..a6ce537 100644 --- a/app/src/main/java/nuesoft/restfulpy/client/webService/Request.java +++ b/app/src/main/java/nuesoft/restfulpy/client/webService/Request.java @@ -17,6 +17,7 @@ import nuesoft.restfulpy.client.exception.AuthenticationRequiredError; import okhttp3.Call; import okhttp3.Callback; +import okhttp3.FormBody; import okhttp3.Headers; import okhttp3.MediaType; import okhttp3.OkHttpClient; @@ -30,13 +31,16 @@ public class Request { String resource = "session"; String verb = "get"; - Object payload; + Map payload; public Headers headers; String encoding = "json"; RestAdapter restAdapter; Map queryStringMap; private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); + private static final MediaType URL_ENCODED = MediaType.parse("application/x-www-form-urlencoded"); + private static final MediaType MULTIPART_FORM = MediaType.parse("multipart/form-data"); + public Request(RestAdapter restAdapter, String resource, String verb) { @@ -139,7 +143,7 @@ public Request removeAuthenticationHeaders() { } - public Request addParameters(Object payload) { + public Request addParameters(Map payload) { this.payload = payload; return this; @@ -168,6 +172,20 @@ public Deferred send() { requestBody = RequestBody.create(JSON, json); break; } + + case "urlencoded": { + requestBody = RequestBody.create(URL_ENCODED, this.encodeQueryString(this.payload)); + break; + } + + case "multipart": { + FormBody.Builder formBody = new FormBody.Builder(); + for (Map.Entry set : this.payload.entrySet()) { + formBody.add(set.getKey(), String.valueOf(set.getValue())); + } + requestBody = formBody.build(); + break; + } //TODO: other cased //RequestBody requestBody1 = new FormBody.Builder().build(); //new MultipartBody.Builder().addFormDataPart()