Используя Spring RestTemplate, как я могу записать ответ при возникновении ошибки? - PullRequest
0 голосов
/ 26 сентября 2018

Spring RestTemplate может установить errorHandler, который имеет методы для обработки ошибок.У меня есть обработчик ошибок, подобный этому

try (BufferedReader buffer = new BufferedReader(new InputStreamReader(clientHttpResponse.getBody()))) {
     final String response = buffer.lines().collect(Collectors.joining("\n"));
     System.out.println(response);
  }

, но он всегда говорит мне, что входной поток близок.Это ошибка или я что-то упустил?

1 Ответ

0 голосов
/ 30 сентября 2018

Обработчик ошибок по умолчанию RestTemplate DefaultResponseErrorHandler уже читает тело ответа и устанавливает его в объекте HttpStatusCodeException, который он выбрасывает.

try {
    restTemplate.getForObject("http://...", String.class);
} catch (HttpStatusCodeException e) {
    System.out.println("Received error: " + e.getResponseBodyAsString());
}

Если вы хотите всегда регистрировать тело ответа при ошибкене требуя перехвата HttpStatusCodeException, вы можете расширить обработчик ошибок по умолчанию.

public static class LoggingErrorHandler extends DefaultResponseErrorHandler {
    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        try {
            super.handleError(response);
        } catch (HttpStatusCodeException e) {
            System.out.println("Error response body is " + e.getResponseBodyAsString());
            throw e;
        }
    }
}

Используйте указанный выше обработчик ошибок при создании экземпляра шаблона отдыха.

RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new LoggingErrorHandler());
String response = restTemplate.getForObject("http://...", String.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...