改造2:responseBodyConverter转换为空对象

我正在使用Retrofit的最新版本(截至目前的2.0.0-beta4版本)。 当从服务器接收到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()返回一个空值的对象。 我看了类似的post ,但没有帮助。

代码有什么问题?

在futurestud.io博客评论中find答案

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; } } }