【发布时间】:2018-02-12 18:20:28
【问题描述】:
我有一个非常简单的 web 服务,它由一个 post 端点组成:
@POST(PROTOCOL)
Call<POST> addMaintenanceProtocol(@Body MaintenanceProtocolItem proto);
当我调用它时,我会调用 onFailure 方法,但出现以下异常:
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)
这是由于此端点的返回正文是 pdf 文件而不是 GSON,或者更一般地说是原始字节流。我怎样才能使改造不尝试将响应体反序列化为 gson 对象。在服务器上,我可以看到实际的 POST 请求已经成功,只是客户端很难解析数据。
【问题讨论】: