Consuming weird content-types with Micronaut HttpClient

Share on:

I just lost 1 hour searching, so I am just blogging to raise awareness and provide an extra link to the existing documentation of Micronaut, which I managed to miss, just before my eyes.

So I was trying to consume an API (HTTP/JSON) with response text/javascript

1 Content-Type: "text/javascript"

I had totally missed that specific case and I was wondering why this piece of code that I had written several times was not working. The httpclient snippet looks like this.

1public Flowable<CustomResponseWrapper> findRecipe(String qName){
2  var url= UriBuilder.of(BASE_URL).queryParam("q",qName).build();
3  HttpRequest request=HttpRequest.GET(url);
4  return httpClient.retrieve(request,CustomResponseWrapper.class);
5}

Obviously when you try to test it you get several errors, things like empty_body, etc.

 1[
 2{
 3 "timestamp": "2020-12-26T17:13:49.246Z",
 4 "level": "TRACE",
 5 "logger_name": "io.micronaut.http.client.netty.DefaultHttpClient",
 6 "message": "Unable to convert response body to target type class com.javapapo.xxxx.CustomWrapperResponse.class"
 7},
 8{
 9 "timestamp": "2020-12-26T17:13:49.248Z",
10 "level": "ERROR",
11 "logger_name": "io.micronaut.http.netty.stream.HttpStreamsHandler",
12 "message": "Error occurred writing stream response: Failed to decode the body for the given content type [text/javascript]",
13 "stack_trace": "io.micronaut.http.client.exceptions.HttpClientResponseException: Failed to decode the body for the given content type [text/javascript]"
14}
15]

I found the solution on this github issue but it proved there was already a section on the official documentation as well. See here

The fix was just 1 line of extra config as per documentation

1micronaut.codec.json.additionalTypes: [ "text/javascript" ]