We're trying to use Groovy's HTTPBuilder's request method to send a POST request with a content type of application/x-www-form-urlencoded
, and parse the response from the server, which has a content type of application/json
.
The library ignores the Content-Type
header in the response, and wants to parse it as application/x-www-form-urlencoded
.
Our code looks like this:
import static groovyx.net.http.ContentType.URLENC
import static groovyx.net.http.Method.POST
import groovyx.net.http.HTTPBuilder
def http = new HTTPBuilder('https://example.com')
def result = http.request(POST, URLENC) {
uri.path = "/some/path"
body = [
someProperty: "someValue"
]
}
I can see from the wire logs that the request has a Content-Type: application/x-www-form-urlencoded
header, and the response has a Content-Type: application/json
header - and the response is well-formed JSON, but the debug log for HTTPBuilder emits this line:
DEBUG http.HTTPBuilder - Parsing response as: application/x-www-form-urlencoded
And indeed, parses the response as though it was x-www-urlencoded.
I've looked through HTTPBuilder's source and it seems as though it wants to ignore the content type of the response if the content type of the request is anything other than */*
.
Based on this, we've managed to make it work as desired by configuring the HTTPBuilder instance such that:
http.parser.'application/x-www-form-urlencoded' = http.parser.'application/json'
...but changing the parser for x-www-form-urlencoded seems like taking a crowbar to the library. Is there an idiomatic way to tell HTTPBuilder to use one content type for the request and use the Content-Type header of the response to parse the result?