android - Retrofit/OkHttp3 400 错误正文为空

标签 android retrofit2 okhttp

我在我的 Android 项目中使用 Retrofit 2。当我使用 GET 方法访问 API 端点并返回 400 级错误时,我可以在使用 HttpLoggingInterceptor 时看到错误内容,但是当我到达 Retrofit OnResponse 回调时,错误正文的字符串为空。

我可以看到错误有一个主体,但在 Retrofit 回调的上下文中我似乎无法拉出该主体。有没有办法确保可以在那里访问 body ?

谢谢, 亚当

编辑: 我从服务器看到的响应是: {"error":{"errorMessage":"对于输入字符串:\"000001280_713870281\"","httpStatus":400}}

我试图通过以下方式从响应中提取该响应: BaseResponse baseResponse = GsonHelper.getObject(BaseResponse.class, response.errorBody().string()); if (baseResponse != null && !TextUtils.isEmpty(baseResponse.getErrorMessage())) error = baseResponse.getErrorMessage();

(GsonHelper 只是一个帮助器,它通过 GSON 传递 JSON 字符串来拉取 BaseResponse 类型的对象)

调用 response.errorBody().string() 导致 IOException: Content-Length 和 stream length 不一致,但我在 Log Cat 中看到了上面 2 行的内容

最佳答案

我之前遇到过同样的问题,我使用代码 response.errorBody().string() 修复了一次。如果您多次使用它,您将收到 IOException,因此建议您将它用作一次性流,就像 ResponseBody 上的文档所说的那样。

我的建议是:立即将 Stringified errorBody() 转换为对象,因为后者是您将在后续操作中使用的对象。

关于android - Retrofit/OkHttp3 400 错误正文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383401/

相关文章:

java - 使改造省略未设置的查询参数

java - RestAdapter Retrofit(2.0.2) 无法解析符号 android studio

java - 在使用 dagger2 的示例中如何使用 okhttp 和 gson 进行改造

android - CPU 使用率异常 - Okio Watchdog

android - 用于移动应用开发的云服务

java - 我需要在我的 View 中调用 MediaPlayer

android - MPAndroidChart:在条形图中将 X 轴的标签旋转 90 度

android - Git stash apply 在文件中留下额外的字符串

java - 为什么 okhttp3 client.execute 不起作用?

java - 使用 OkHttp 获取 Http 状态码