Дооснащение getBodyAs() не позволяет проанализировать ошибку сервера

Я пытаюсь разобрать сообщение сервера, которое отправляется, когда что-то пошло не так. Сообщение отправляется в JSON:

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

Класс модели для ошибки:

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

Модификация создается с помощью этого кода:

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();

И извлечение ошибки:

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

Он работает без исключений, поэтому кажется, что я делаю что-то вроде правильного. Но он постоянно не разбирает оба поля в ответе. Retrofit создается только один раз, и он успешно извлекает и анализирует все ответы сервера, за исключением ошибки.

Я использую последнюю доступную банку Retrofit - 1.4.1

Что я делаю неправильно?

Ответы

Ответ 1

Попробуйте сделать это, если вы все еще сталкиваетесь с этой проблемой. Я знаю, что это очень старый вопрос, но он может помочь другим.

    if (restError != null)
        failure(restError);
    else
    {
        failure(new RestError(error.getMessage()));
    }

Ответ 2

Простое решение с getBodyAs для получения объекта JSON.

JsonObject responseAsJson = (JsonObject) retrofitError.getBodyAs(JsonElement.class);

String  message = responseAsJson.get("Message").getAsString(); //=> "readable reason"
Integer      id = responseAsJson.get("Id").getAsInt();         //=> 0

Подтвержденная работа в модификации 1.x. Не уверен, какие изменения необходимы для Retrofit 2.x.