即使 http 状态码不是 200,如何继续从 REST API 获取响应数据?
How to continue to get response data from REST API even if http status code is not 200?
我正在使用改造 2.0.2 和 okhttp3 来构建我的应用程序。如果服务器代码有任何逻辑错误,我的服务器将 http 状态代码设置为 418。比如密码不匹配。响应数据为 {"statuscode":500}。 500 表示密码不匹配。当 okhttp3 获取非 200 http 状态代码时,我不知道如何读取响应数据。改造得到 418 时抛出异常。
我的问题是即使 http 状态代码不是 200,如何读取响应数据。
有什么建议吗?
我假设您将呼叫定义为:
Observable<YourModel> doStuff();
您将获得 onSuccess
HTTP 代码 200-300 的回调和 onError
HTTP 错误代码、网络错误、解析错误...
您也可以将调用定义为:
Observable<Response<YourModel>> doStuff();
当出现 HTTP 错误时,您将接到 onSuccess
的电话。
在 onSuccess
中您需要检查 response.isSuccess()
。 returns 对于 200-300 个状态代码为真,您可以使用 response.body()
访问响应正文
如果 response.isSuccess()
returns 为假,您可以使用以下方法将错误主体 class 转换为您的模型:
if(throwable instanceof HttpException) {
//we have a HTTP exception (HTTP status code is not 200-300)
Converter<ResponseBody, Error> errorConverter =
retrofit.responseBodyConverter(Error.class, new Annotation[0]);
//maybe check if ((HttpException) throwable).code() == 400 ??
Error error = errorConverter.convert(((HttpException) throwable).response().errorBody());
}
我正在使用改造 2.0.2 和 okhttp3 来构建我的应用程序。如果服务器代码有任何逻辑错误,我的服务器将 http 状态代码设置为 418。比如密码不匹配。响应数据为 {"statuscode":500}。 500 表示密码不匹配。当 okhttp3 获取非 200 http 状态代码时,我不知道如何读取响应数据。改造得到 418 时抛出异常。
我的问题是即使 http 状态代码不是 200,如何读取响应数据。
有什么建议吗?
我假设您将呼叫定义为:
Observable<YourModel> doStuff();
您将获得 onSuccess
HTTP 代码 200-300 的回调和 onError
HTTP 错误代码、网络错误、解析错误...
您也可以将调用定义为:
Observable<Response<YourModel>> doStuff();
当出现 HTTP 错误时,您将接到 onSuccess
的电话。
在 onSuccess
中您需要检查 response.isSuccess()
。 returns 对于 200-300 个状态代码为真,您可以使用 response.body()
如果 response.isSuccess()
returns 为假,您可以使用以下方法将错误主体 class 转换为您的模型:
if(throwable instanceof HttpException) {
//we have a HTTP exception (HTTP status code is not 200-300)
Converter<ResponseBody, Error> errorConverter =
retrofit.responseBodyConverter(Error.class, new Annotation[0]);
//maybe check if ((HttpException) throwable).code() == 400 ??
Error error = errorConverter.convert(((HttpException) throwable).response().errorBody());
}