From c7d0493af8dce1e46cb6408b26ce62f8895a3c5b Mon Sep 17 00:00:00 2001 From: "nikolce.mihajlovski" Date: Sun, 22 Nov 2015 00:01:50 +0100 Subject: [PATCH] Improved HTTP client API: configurable content type for raw data post. --- .../rapidoid/test/AsyncHttpServerTest.java | 2 +- .../org/rapidoid/test/HttpServerTest.java | 2 +- .../src/main/java/org/rapidoid/http/HTTP.java | 38 +++++++++++-------- .../java/org/rapidoid/http/HttpClient.java | 15 +++++--- .../java/org/rapidoid/http/RESTClient.java | 2 +- 5 files changed, 35 insertions(+), 24 deletions(-) diff --git a/rapidoid-integration-tests/src/test/java/org/rapidoid/test/AsyncHttpServerTest.java b/rapidoid-integration-tests/src/test/java/org/rapidoid/test/AsyncHttpServerTest.java index ee84814c67..c1095cbf82 100644 --- a/rapidoid-integration-tests/src/test/java/org/rapidoid/test/AsyncHttpServerTest.java +++ b/rapidoid-integration-tests/src/test/java/org/rapidoid/test/AsyncHttpServerTest.java @@ -76,7 +76,7 @@ public void run() { HTTPServer server = WebServer.create().applications(WebAppGroup.main()).build().start(); eq(new String(HTTP.get("http://localhost:8888/")), "OK"); - eq(new String(HTTP.post("http://localhost:8888/")), "OK"); + eq(new String(HTTP.post("http://localhost:8888/", null, new byte[0], null)), "OK"); server.shutdown(); Ctxs.close(); diff --git a/rapidoid-integration-tests/src/test/java/org/rapidoid/test/HttpServerTest.java b/rapidoid-integration-tests/src/test/java/org/rapidoid/test/HttpServerTest.java index cac51cd712..442918c50c 100644 --- a/rapidoid-integration-tests/src/test/java/org/rapidoid/test/HttpServerTest.java +++ b/rapidoid-integration-tests/src/test/java/org/rapidoid/test/HttpServerTest.java @@ -46,7 +46,7 @@ public void testHttpServer() { HTTPServer server = WebServer.create().applications(WebAppGroup.main()).build().start(); eq(new String(HTTP.get("http://localhost:8888/")), "home"); - eq(new String(HTTP.post("http://localhost:8888/")), "\"abc\""); + eq(new String(HTTP.post("http://localhost:8888/", null, new byte[0], null)), "\"abc\""); server.shutdown(); Ctxs.close(); diff --git a/rapidoid-rest/src/main/java/org/rapidoid/http/HTTP.java b/rapidoid-rest/src/main/java/org/rapidoid/http/HTTP.java index 76b65effca..f0ecf6ebe8 100644 --- a/rapidoid-rest/src/main/java/org/rapidoid/http/HTTP.java +++ b/rapidoid-rest/src/main/java/org/rapidoid/http/HTTP.java @@ -31,8 +31,26 @@ @Since("2.0.0") public class HTTP { + public static final String CONTENT_TYPE_MULTIPART = "multipart/form-data"; + public static final String CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded"; + public static final String CONTENT_TYPE_JSON = "application/json"; + public static final String CONTENT_TYPE_XML = "application/xml"; + public static final String CONTENT_TYPE_BINARY = "application/octet-stream"; + public static final HttpClient DEFAULT_CLIENT = new HttpClient(); + /********************************** GET **********************************/ + + public static Future get(String uri, Callback callback) { + return DEFAULT_CLIENT.get(uri, callback); + } + + public static byte[] get(String uri) { + return get(uri, null).get(); + } + + /********************************** POST **********************************/ + public static Future post(String uri, Map headers, Map data, Map files, Callback callback) { return DEFAULT_CLIENT.post(uri, headers, data, files, callback); @@ -43,25 +61,13 @@ public static byte[] post(String uri, Map headers, Map post(String uri, Map headers, String postData, + public static Future post(String uri, Map headers, byte[] postData, String contentType, Callback callback) { - return DEFAULT_CLIENT.post(uri, headers, postData, callback); + return DEFAULT_CLIENT.post(uri, headers, postData, contentType, callback); } - public static byte[] post(String uri, Map headers, String postData) { - return post(uri, headers, postData, null).get(); - } - - public static byte[] post(String uri) { - return post(uri, null, null, null, null).get(); - } - - public static Future get(String uri, Callback callback) { - return DEFAULT_CLIENT.get(uri, callback); - } - - public static byte[] get(String uri) { - return get(uri, null).get(); + public static byte[] post(String uri, Map headers, byte[] postData, String contentType) { + return post(uri, headers, postData, contentType, null).get(); } } diff --git a/rapidoid-rest/src/main/java/org/rapidoid/http/HttpClient.java b/rapidoid-rest/src/main/java/org/rapidoid/http/HttpClient.java index 9272db10c8..4f24fb8127 100644 --- a/rapidoid-rest/src/main/java/org/rapidoid/http/HttpClient.java +++ b/rapidoid-rest/src/main/java/org/rapidoid/http/HttpClient.java @@ -72,13 +72,18 @@ public HttpClient(CloseableHttpAsyncClient client) { client.start(); } - public Future post(String uri, Map headers, String postData, Callback callback) { + public Future post(String uri, Map headers, byte[] postData, String contentType, + Callback callback) { headers = U.safe(headers); HttpPost req = new HttpPost(uri); - NByteArrayEntity entity = new NByteArrayEntity(postData.getBytes(), ContentType.APPLICATION_FORM_URLENCODED); + NByteArrayEntity entity = new NByteArrayEntity(postData); + + if (contentType != null) { + entity.setContentType(contentType); + } for (Entry e : headers.entrySet()) { req.addHeader(e.getKey(), e.getValue()); @@ -86,7 +91,7 @@ public Future post(String uri, Map headers, String postD req.setEntity(entity); - Log.info("Starting HTTP POST request", "request", req.getRequestLine()); + Log.debug("Starting HTTP POST request", "request", req.getRequestLine()); return execute(client, req, callback); } @@ -128,7 +133,7 @@ public Future post(String uri, Map headers, Map post(String uri, Map headers, Map get(String uri, Callback callback) { HttpGet req = new HttpGet(uri); - Log.info("Starting HTTP GET request", "request", req.getRequestLine()); + Log.debug("Starting HTTP GET request", "request", req.getRequestLine()); return execute(client, req, callback); } diff --git a/rapidoid-rest/src/main/java/org/rapidoid/http/RESTClient.java b/rapidoid-rest/src/main/java/org/rapidoid/http/RESTClient.java index 09478a1104..26cff54a23 100644 --- a/rapidoid-rest/src/main/java/org/rapidoid/http/RESTClient.java +++ b/rapidoid-rest/src/main/java/org/rapidoid/http/RESTClient.java @@ -44,7 +44,7 @@ public T get(String uri, Class resultType) { public Future post(String uri, Class resultType, Callback callback) { RESTResultMapper mapper = new RESTResultMapper(resultType); Callback cb = Callbacks.mapping(callback, mapper); - return Futures.mapping(HTTP.post(uri, null, "", cb), mapper); + return Futures.mapping(HTTP.post(uri, null, new byte[0], cb), mapper); } public T post(String uri, Class resultType) {