gpt4 book ai didi

android - 使用 Retrofit 从 RetrofitError 对象获取 JSON

转载 作者:IT王子 更新时间:2023-10-29 00:02:44 27 4
gpt4 key购买 nike

我正在使用 Retrofit 库对我正在使用的服务进行 REST 调用。

如果我对我的服务进行 API 调用并出现故障,该服务会返回一些 JSON 以及标准 HTTP 错误内容。使用失败回调中包含的 RetrofitError 对象,我能够找到 HTTP 状态代码和其他一些内容,但是我无法检索服务发回的 JSON。

例如,假设我在尝试创建用户的地方调用 API。如果用户名已经存在,服务将返回 400 错误代码以及一些 JSON,如下所示:

{"error":"Username already in use"}

因为一个简单的 400 错误代码不够具体,我确实需要访问返回的 JSON。

有谁知道我如何获取这些 JSON 数据?我尝试查看 RetrofitError 对象中的每个字段,但在任何地方都找不到。我还需要做些什么吗?

最佳答案

您可以使用 getBodyAs RetrofitError 对象的方法。与其他 Retrofit 转换类似,它将响应转换为 Java 对象。首先定义一个描述您的 JSON 错误响应的类:

class RestError {
@SerializedName("code")
public int code;
@SerializedName("error")
public String errorDetails;
}

然后使用前面提到的方法获取更详细描述错误的对象。

catch(RetrofitError error) {
if (error.getResponse() != null) {
RestError body = (RestError) error.getBodyAs(RestError.class);
log(body.errorDetails);
switch (body.code) {
case 101:
...
case 102:
...
}
}
}

Retrofit 2.0 改变了错误响应是转换器的方式。您需要使用 responseBodyConverter 获得正确的转换器方法并使用它来转换响应的错误正文。除非处理异常,否则:

Converter<ResponseBody, RestError> converter 
= retrofit.responseBodyConverter(RestError.class, new Annotation[0]);
RestError errorResponse = converter.convert(response.errorBody());

关于android - 使用 Retrofit 从 RetrofitError 对象获取 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com