我在我的 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/