【问题标题】:Retrofit 2: responseBodyConverter converts to null object改造 2:responseBodyConverter 转换为空对象
【发布时间】:2016-07-20 21:47:03
【问题描述】:

我正在使用Retrofit 的最新版本(截至目前为 2.0.0-beta4)。从服务器收到 200 OK 代码时,一切正常。但我也想处理 not 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,但没有帮助。

代码有什么问题?

【问题讨论】:

    标签: android http error-handling retrofit retrofit2


    【解决方案1】:

    futurestud.io博客cmets找到答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多