Невозможно прочитать необработанное тело ответа преобразованного тела.JAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно прочитать необработанное тело ответа преобразованного тела.

Сообщение Anonymous »

Я пытаюсь вывести возможные ошибки при вызове внешнего API с помощью Retrofit. Я написал следующий метод:

Код: Выделить всё

private static void printPossibleErrors(Response response) throws IOException {
if (Objects.nonNull(response) && !response.isSuccessful()) {

try (okhttp3.Response raw = response.raw(); ResponseBody errorBody = response.errorBody()) {
String fullUrl = Optional.ofNullable(raw)
.map(okhttp3.Response::request)
.map(Request::url)
.map(HttpUrl::toString)
.orElseGet(() -> "");
log.info(
"MY api calling {} error response with code: {}, body: {}",
fullUrl,
response.code(),
errorBody.string());
}
}
}
Этот метод работает хорошо, и я вижу в консоли на своем локальном компьютере, как регистрируется ошибка. Однако при выходе из метода выдается исключение IllegalStateException:

java.lang.IllegalStateException: невозможно прочитать необработанное тело ответа
преобразованного тела.

Я много читал и обнаружил, что ResponseBody из Retrofit не может читать дважды. Однако в моем коде я читаю необработанный ответ и тело ошибки, которые являются отдельными объектами:

Код: Выделить всё

public final class Response {

private final okhttp3.Response rawResponse;
private final T body;
private final ResponseBody errorBody;

// ...
}
Затем я получаю от них соответствующую информацию. Единственное, что мне приходит в голову, это то, что, возможно, ресурсы try-with дважды читают эти объекты внутри объекта Retrofit2 Response? Я ожидал, что исключение возникнет во время выполнения метода, но оно выполнилось полностью.

Подробнее здесь: https://stackoverflow.com/questions/797 ... erted-body

Вернуться в «JAVA»