我在我的 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 和流长度不一致,但我在 Log Cat 中看到了上面 2 行的内容

最佳答案

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

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

10-07 20:04