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; } } } 
  • HttpLoggingInterceptor no registra con retrofit 2
  • Cómo soportar múltiples puntos finales con Dagger 2.0 mientras usa MockWebServer
  • Android Retrofit 2 + RxJava: escuchar stream sin fin
  • Falló el socket OkHttp3: EMFILE (Demasiados archivos abiertos)
  • Cómo enviar datos de formulario en retrofit2 android
  • Retrofit2 (interceptor) + GoogleApiClient cómo actualizar token
  • ¿Cómo obtener una cadena de respuesta de Retrofit sin procesar?
  • RxJava / Retrofit - ¿Cómo puedo obligar a los usuarios a usar una subclase específica de suscriptor?
  • ¿Es posible la llamada a SOAP webservice usando Retrofit?
  • Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
  • Retrofit 2 Callback onResponse en el subproceso de fondo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.