Ответ 1
Если вы делаете синхронный запрос, вы определяете свой метод запроса в интерфейсе как Call<List<Car>>
.
После выполнения запроса вы получите ответ и десериализованные данные, завернутые в Response<T>
, как Response<List<Car>>
. Это завернутое дает вам доступ к заголовкам, http-кодам и сырому телу ответа.
Вы можете получить доступ к корпусу ошибки как:
Call<List<Car>> carsCall = carInterface.loadCars();
try {
Response<List<Car>> carsResponse = carsCall.execute();
} catch (IOException e) {
e.printStackTrace();
//network Exception is throw here
}
if(carsResponse != null && !carsResponse.isSuccess() && carsReponse.errorBody() != null){
// handle carsResponse.errorBody()
}
Для асинхронных вызовов вы получаете Throwable
, если во время сетевого вызова выбрано исключение ввода/вывода:
Call<List<Car>> call = service.loadCars();
call.enqueue(new Callback<List<Car>>() {
@Override
public void onResponse(Response<List<Car>> response) {
// Get result from response.body(), headers, status codes, etc
}
@Override
public void onFailure(Throwable t) {
//handle error
}
});