Из вашего кода не совсем понятно, если вы получаете статус 200, даже если вызов не удался, но из того, что вы описываете, похоже, что вы получаете другой код состояния http.
Если это так,Дооснащение все еще вызывает метод onResponse
, но response.isSuccessful()
имеет значение false, и тело будет доступно через метод response.errorBody()
.
Простой способ получить это:
if(response.isSuccessful())
// Do what you are doing
else {
Gson gson = new Gson();
LoginResponse error = gson.fromJson(response.errorBody().string());
// Use the error variable now
}
Здесь много чего происходит.Давайте начнем с того, зачем вам ручная десериализация.Retrofit не преобразует тело ошибки автоматически, вам нужно сделать это самостоятельно.Здесь я решил создать экземпляр Gson
, который не элегантен, но служит цели.
Я также решил использовать string()
.Этот метод читает весь ответ в память и может привести к сбою для больших ответов.Его вызов опустошит буфер okhttp, а это значит, что вы не сможете вызывать его снова (насколько мне известно), поэтому держите его в переменной, если хотите использовать его несколько раз.
Надеюсь, это поможет