作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用最新的(截至目前为 2.0.0-beta4)版本的 Retrofit .当从服务器收到 200 OK 代码时,一切正常。但我也想处理不正常的响应,例如代码 401。因此,我必须获取错误响应代码才能准确确定要执行的操作并显示适当的数据:
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if (response != null && !response.isSuccess() && response.errorBody() != null) {
Converter<ResponseBody, APIError> errorConverter = retrofit.responseBodyConverter(APIError.class, new Annotation[0]);
try {
APIError error = errorConverter.convert(response.errorBody());
Toast.makeText(getContext(), "code = " + error.getCode() + ", status = " + error.getStatus(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
} else if (null != response) {
if (response.isSuccess()) {
LoginResponse loginResponse = response.body();
Toast.makeText(getContext(), "Successful login: " + loginResponse.getId(), Toast.LENGTH_SHORT).show();
}
}
}
APIError.java
public class APIError {
String name;
int status;
String message;
int statusCode;
String code;
String stack;
public String getName() {
return name;
}
public int getStatus() {
return status;
}
public String getCode() {
return code;
}
}
服务器的错误响应
{
"error": {
"name": "Error",
"status": 401,
"message": "login failed",
"statusCode": 401,
"code": "LOGIN_FAILED",
"stack": "Error: login failed"
}
}
但是 errorConverter.convert()
返回一个具有空值的对象。我看过similar posts , 但它没有帮助。
代码有什么问题?
最佳答案
在 futurestud.io 中找到了答案博客评论:
将 APIError.java 更改为:
public class APIError {
Error error;
public Error getError() {
return error;
}
public static class Error {
String name;
int status;
String message;
int statusCode;
String code;
String stack;
public String getName() {
return name;
}
public int getStatus() {
return status;
}
public String getCode() {
return code;
}
}
}
关于android - 改造 2 : responseBodyConverter converts to null object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350356/
我正在尝试使用 RetroFit 的 responseBodyConverter()但是我遇到了一些麻烦,我希望通过java.lang.annoatation.annoatation作为第二个参数,但
我正在使用最新的(截至目前为 2.0.0-beta4)版本的 Retrofit .当从服务器收到 200 OK 代码时,一切正常。但我也想处理不正常的响应,例如代码 401。因此,我必须获取错误响应代
我是一名优秀的程序员,十分优秀!