Java.lang.IllegalStateException: невозможно прочитать необработанное тело ответа преобразованного тела [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java.lang.IllegalStateException: невозможно прочитать необработанное тело ответа преобразованного тела [закрыто]

Сообщение 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 ... nverted-bo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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