Retrofit getBodyAs () no puede analizar el error del servidor

Estoy tratando de analizar el mensaje del servidor que se envía cuando algo salió mal. El mensaje se envía en JSON:

{ "Message" : "readable reason", "Id" : 0, // reason code } 

Clase de modelo para error:

 public class RetrofitError { private String message; private int id; } 

El retrofit se crea con este código:

 RestAdapter.Builder builder = new RestAdapter.Builder(); builder.setLog(new AndroidLog(LOG_TAG)); builder.setLogLevel(LogLevel.FULL); builder.setEndpoint(Constants.getUrl()); builder.setRequestInterceptor(requestInterceptor); GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonBuilder.setPrettyPrinting(); Gson gson = gsonBuilder.create(); builder.setConverter(new GsonConverter(gson)); RestAdapter restAdapter = builder.build(); 

Y el error de recuperación:

 RetrofitError error = (RetrofitError)retrofitError.getBodyAs(RetrofitError.class) 

Funciona sin excepciones, por lo que parece que estoy haciendo algo como lo correcto. Pero constantemente falla en analizar ambos campos en la respuesta. Retrofit se crea una sola vez y recupera y analiza todas las respuestas del servidor con excepción de un error.

Estoy usando el último tarro de retrofit disponible – 1.4.1

¿Qué estoy haciendo mal?

Trate de hacer esto si sigue enfrentando este problema. Sé que esta es una pregunta muy antigua pero podría ayudar a otros.

  if (restError != null) failure(restError); else { failure(new RestError(error.getMessage())); } 
  • Recupere la respuesta http en Retrofit antes de pasarla a la actividad de llamada
  • Retrofit: ¿agrega el parámetro runtime a la interfaz?
  • Divide la declaración de servicio de Retrofit en múltiples interfaces
  • Retrofit Observables y cancelación
  • Javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Ancla de confianza para la ruta de certificación no encontrada
  • Android Retrofit - cómo sustituir baseUrl
  • ¿Cómo se maneja el error en Retrofit 2? ¿No encuentro la clase RetrofitError que sugiere la mayoría de las soluciones?
  • Causado por: retrofit.RetrofitError: método POST debe tener un cuerpo de solicitud
  • Uso de la función de activación de llamadas en Retrofit
  • ¿Cómo puedo usar retrofit library con la barra de progreso?
  • Manejo de errores personalizado con Retrofit
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.