diff --git a/CHANGELOG.md b/CHANGELOG.md index b49a36d..32eb444 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.10.2 + +-Fixed #78: overriding header "Content-Type" not working on Android + ## 1.10.1 - Fixed #71: does not encode query string in URL correctly on Android diff --git a/src/android/com/synconset/cordovahttp/CordovaHttp.java b/src/android/com/synconset/cordovahttp/CordovaHttp.java index 3d24021..cbe893f 100644 --- a/src/android/com/synconset/cordovahttp/CordovaHttp.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttp.java @@ -149,18 +149,12 @@ abstract class CordovaHttp { return request; } - protected HttpRequest setupDataSerializer(HttpRequest request) throws JSONException, Exception { + protected void setupDataSerializer(HttpRequest request) throws JSONException, Exception { if ("json".equals(this.getSerializerName())) { request.contentType(request.CONTENT_TYPE_JSON, request.CHARSET_UTF8); - request.send(this.getParamsObject().toString()); } else if ("utf8".equals(this.getSerializerName())) { request.contentType("text/plain", request.CHARSET_UTF8); - request.send(this.getParamsMap().get("text").toString()); - } else { - request.form(this.getParamsMap()); } - - return request; } protected void respondWithError(int status, String msg) { @@ -240,6 +234,16 @@ abstract class CordovaHttp { request.uncompress(true); } + protected void prepareRequestBody(HttpRequest request) throws JSONException, Exception { + if ("json".equals(this.getSerializerName())) { + request.send(this.getParamsObject().toString()); + } else if ("utf8".equals(this.getSerializerName())) { + request.send(this.getParamsMap().get("text").toString()); + } else { + request.form(this.getParamsMap()); + } + } + private CharsetDecoder createCharsetDecoder(final String charsetName) { return Charset.forName(charsetName).newDecoder() .onMalformedInput(CodingErrorAction.REPORT) diff --git a/src/android/com/synconset/cordovahttp/CordovaHttpPatch.java b/src/android/com/synconset/cordovahttp/CordovaHttpPatch.java index 5696505..b157fb1 100644 --- a/src/android/com/synconset/cordovahttp/CordovaHttpPatch.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpPatch.java @@ -25,8 +25,9 @@ class CordovaHttpPatch extends CordovaHttp implements Runnable { try { HttpRequest request = HttpRequest.patch(this.getUrlString()); - this.prepareRequest(request); this.setupDataSerializer(request); + this.prepareRequest(request); + this.prepareRequestBody(request); this.returnResponseObject(request); } catch (HttpRequestException e) { this.handleHttpRequestException(e); diff --git a/src/android/com/synconset/cordovahttp/CordovaHttpPost.java b/src/android/com/synconset/cordovahttp/CordovaHttpPost.java index ac3a3da..e42bba6 100644 --- a/src/android/com/synconset/cordovahttp/CordovaHttpPost.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpPost.java @@ -25,8 +25,9 @@ class CordovaHttpPost extends CordovaHttp implements Runnable { try { HttpRequest request = HttpRequest.post(this.getUrlString()); - this.prepareRequest(request); this.setupDataSerializer(request); + this.prepareRequest(request); + this.prepareRequestBody(request); this.returnResponseObject(request); } catch (HttpRequestException e) { this.handleHttpRequestException(e); diff --git a/src/android/com/synconset/cordovahttp/CordovaHttpPut.java b/src/android/com/synconset/cordovahttp/CordovaHttpPut.java index 2ca0aca..f75885d 100644 --- a/src/android/com/synconset/cordovahttp/CordovaHttpPut.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpPut.java @@ -25,8 +25,9 @@ class CordovaHttpPut extends CordovaHttp implements Runnable { try { HttpRequest request = HttpRequest.put(this.getUrlString()); - this.prepareRequest(request); this.setupDataSerializer(request); + this.prepareRequest(request); + this.prepareRequestBody(request); this.returnResponseObject(request); } catch (HttpRequestException e) { this.handleHttpRequestException(e); diff --git a/test/app-test-definitions.js b/test/app-test-definitions.js index 5dcc6e8..8f36356 100644 --- a/test/app-test-definitions.js +++ b/test/app-test-definitions.js @@ -446,6 +446,15 @@ const tests = [ result.type.should.be.equal('resolved'); JSON.parse(result.data.data).json.should.eql({ outerObj: { innerStr: 'testString', innerArr: [1, 2, 3] }}); } + },{ + description: 'should override header "content-type" correctly (POST) #78', + expected: 'resolved: {"status": 200, "headers": "{\\"Content-Type\\": \\"text/plain\\" ...', + before: helpers.setJsonSerializer, + func: function(resolve, reject) { cordova.plugin.http.post('http://httpbin.org/anything', {}, { 'Content-Type': 'text/plain' }, resolve, reject); }, + validationFunc: function(driver, result) { + result.type.should.be.equal('resolved'); + JSON.parse(result.data.data).headers['Content-Type'].should.be.equal('text/plain'); + } } ];