Spring RestTemplate генерирует исключение для ошибки 400, но CloseableHttpClient не делает - PullRequest
0 голосов
/ 28 февраля 2019

Мы используем весеннюю версию 4.3.9 и используем RestTemplate для остальных вызовов.У нас есть тесты, в которых умышленно имеется плохо отформатированный контент, когда мы вызываем конкретную конечную точку (сам запрос в порядке, содержимое полезной нагрузки умышленно неправильно отформатировано).

В любом случае, при этих условиях конечная точка возвращает объект ответа со значимой информацией в дополнение к тегу 400 как ошибка (неправильный запрос).RestTemplate видит ошибку 400 и выдает HttpClientErrorException.Так как это исключение выдается, объект ответа имеет значение null.

Когда я выполняю идентичный запрос (неверные данные и все) с помощью обычного вызова Apache HttpClient, исключение не выдается (несмотря на ошибку 400) иобъект запроса возвращается со значимой (полезной) информацией.

При выполнении с расширенной настройкой ведения журнала весенней отладки я вижу, что значимая информация была определенно возвращена из клиентского вызова RestTemplate, однако RestTemplate выбрасывает исключение и, следовательно, не делаеткажется, делает сообщение доступным для вызывающего абонента.

Возможно ли, что значимое сообщение похоронено где-то в ответе об исключении?Если так, как я могу извлечь это?

Если не возвращено как часть исключения, есть ли способ, с помощью которого RestTemplate может вызвать это исключение, а вместо этого просто вернуть объект ответа, как это делает HttpClient?

Спасибо за любой ответ!

1 Ответ

0 голосов
/ 28 февраля 2019

Возможно ли, что значимое сообщение где-то скрыто в ответе об исключении?

Да, тело ответа находится в объекте исключения.

Чтобы получить тело ответа, вы можете использовать: HttpClientErrorException.getResponseBodyAsString() или HttpClientErrorException.getResponseBodyAsByteArray() методы.

Проверьте это

...