Дооснащение 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.