Retrofit 2: responseBodyConverter convierte a objeto nulo

Estoy usando la versión más reciente (de ahora 2.0.0-beta4) de Retrofit . Al recibir 200 código de OK del servidor, todo está funcionando bien. Pero quiero tratar con respuestas no OK también, como el código 401. Por lo tanto, tengo que obtener el código de respuesta de error para averiguar exactamente qué acción hacer y mostrar los datos adecuados:

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

Respuesta de error del servidor

 { "error": { "name": "Error", "status": 401, "message": "login failed", "statusCode": 401, "code": "LOGIN_FAILED", "stack": "Error: login failed" } } 

Pero errorConverter.convert() devuelve un objeto con valores nulos. He mirado postes similares , pero no ayudó.

¿Qué hay de malo en el código?

One Solution collect form web for “Retrofit 2: responseBodyConverter convierte a objeto nulo”

Encontró la respuesta en comentarios del blog de futurestud.io :

Cambió el APIError.java a esto:

 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; } } } 
  • Renovación de la referencia $ ref de objeto deserializante de JSON a su copia original
  • Establecimiento de una etiqueta en una llamada de Retrofit para cancelar por etiqueta más tarde
  • Error al cargar un archivo con Retrofit 2
  • ¿Cómo hacer una solicitud de POST utilizando retrofit 2?
  • Retrofit 2.0 cómo eliminar?
  • Problema del tipo de contenido de Retrofit-2
  • Formato JSON Body for Retrofit de una sola cadena sin modelo
  • Retrofit2.0 obtiene MalformedJsonException mientras el json parece correcto?
  • Cómo agregar varios encabezados con ok Http
  • No se puede analizar el error en Retrofit 2
  • Interfaz de deserialización de Gson para su implementación Class
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.