Reputation: 3191
I have a very simple webservice which consists of a single post endpoint:
@POST(PROTOCOL)
Call<POST> addMaintenanceProtocol(@Body MaintenanceProtocolItem proto);
When I invoke it I get the onFailure method called with the following exception:
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1559)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1401)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:593)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at com.google.gson.stream.JsonReader.peek(JsonReader.java:425)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:205)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:112)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
02-12 19:57:04.214 5069-5069/com.example.nborisov.perfectelectra W/System.err: at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
02-12 19:57:04.215 5069-5069/com.example.nborisov.perfectelectra W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
02-12 19:57:04.215 5069-5069/com.example.nborisov.perfectelectra W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
02-12 19:57:04.215 5069-5069/com.example.nborisov.perfectelectra W/System.err: at java.lang.Thread.run(Thread.java:764)
This is due to the return body of this endpoint being a pdf file and not a GSON or to be more general a raw stream of bytes. How can I make retrofit not try to deserialize the response body to a gson object. On the server I can see that the actual POST request has succeeded it's just that the client is having hard time parsing the data.
Upvotes: 0
Views: 385
Reputation: 11477
For downloading file using retrofit2... use @Streaming
annotation..and make it call for a ResponseBody
object instead of Post
..
@POST(PROTOCOL)
@Streaming
Call<ResponseBody> addMaintenanceProtocol(@Body MaintenanceProtocolItem proto);
Upvotes: 1