Я использую Retrofit и RxJava, но, похоже, не могу делать то, что хочу.Модернизация Наблюдения и доступ к ответу
Вот мое заявление моего веб-сервиса:
Observable<Response> rawRemoteDownload(@Header("Cookie") String token, @Path("programId") int programId);
У меня проблема является вебсервис возвращается 403 и полезную нагрузку JSon с деталями.
Дооснащение вызываетError, только передача Throwable, поэтому я не могу проверить тело ответа.
Вот часть моего тестового кода
apiManager.rawRemoteDownloadRequest("token", 1).subscribe(new Observer<Response>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
// this is called and I've lost the response!
}
@Override
public void onNext(Response response) {
}
});
РЕШЕНИЕ:
Благодаря Gomino, я пошел с этим в качестве решения:
new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (throwable instanceof RetrofitError) {
Response response = ((RetrofitError) throwable).getResponse();
System.out.println(convertToString(response.getBody()));
}
}
где ConvertToString выглядит следующим образом:
private String convertToString(TypedInput body) {
byte[] bodyBytes = ((TypedByteArray) body).getBytes();
return new String(bodyBytes);
}
только для подтверждения. Модернизация не дает мне POJO ответа после того, как он попадает в путь ошибки? Я могу видеть только сырой JSon. – FinalFive
Я не думаю, что можно попытаться получить POJO, если ошибка была сброшена, но вы можете взглянуть на метод getBodyAs в случае ошибки при модификации. Взгляните на исходный код: https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit/RetrofitError.java – Gomino