Как прочитать тело, используя RestTemplate в случае ошибки? - PullRequest
0 голосов
/ 14 декабря 2018

Я использую RestTemplate для связи с одним сервисом REST, но я использую

     restTemplate.postForEntity(uri, request, MyResponse.class);
 } catch (HttpClientErrorException e)

, однако, когда возникает ошибка (4xx или 5xx), сервис REST возвращает описание в JSON в теле, но HttpClientErrorException.getResponseBodyAsString () возвращает ноль.RestTemplate (если я пытаюсь получить ответ в виде строки), также ничего не возвращает.

Как получить тело в случае ошибки?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Проблема распознана, она описана здесь https://jira.spring.io/browse/SPR-16781?focusedCommentId=159473&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-159473 и здесь https://jira.spring.io/browse/SPR-9367

вам нужно использовать другую библиотеку http, например Apache HttpClient (не из JDK по умолчанию).

Добавьте в свой проект:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

и настройте RestTemplate с:

restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

, вы можете использовать ResponseErrorHandler , если вам нужно, но это не обязательно.

Теперь тело ответа (даже в случае ошибки) хранится в HttpClientErrorException , считайте его с помощью метода getResponseBodyAsString () .

0 голосов
/ 14 декабря 2018

Вы можете получить доступ к ответу на ошибки через ResponseErrorHandler.ResponseErrorHandler необходимо установить для RestTemplate с помощью метода setErrorHandler.

ResponseErrorHandler предоставляет ответ с помощью двух методов

логическое hasError (ответ ClientHttpResponse) выдает IOException;

void handleError (ответ ClientHttpResponse) выдает IOException;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...