Исключение, которое вы выбросили на другом сервере, должно будет отправить ответ с исключением на его теле, и вам нужно будет получить необработанное тело от RestClientResponseException
.
Все сгенерированные исключения вызовом RestTemplate
являются подклассы из HttpClientErrorException
(если происходит 4xx) или HttpServerErrorException
(если происходит 5xx), таким образом, эти два являются подклассами из HttpStatusCodeException
(который является подклассом RestClientResponseException
)
Я не предлагаю этого, но вы можете обобщить и обработать оба из них как HttpStatusCodeException
.
Причина, по которой я не предлагаю это, заключается в том, что вы можете захотеть иметь другую обработку, основанную на клиентская ошибка или ошибка сервера.
Эти два примера должны работать:
Сцепление как HttpStatusCodeException
(обобщение)
try {
restTemplate.exchange(...); // do your request (can use get, post, etc..)
} catch (HttpStatusCodeException e) {
log.info("Error occurred: {}", e.getResponseBodyAsString());
}
Отлов как HttpClientErrorException
и HttpServerErrorException
try {
restTemplate.exchange(...); // do your request (can use get, post, etc..)
} catch (HttpClientErrorException e) {
log.info("OH NO! IT'S AN ERROR FROM THE CLIENT: {}", e.getResponseBodyAsString());
} catch (HttpServerErrorException e) {
log.info("OH NO! IT'S AN ERROR FROM THE SERVER: {}", e.getResponseBodyAsString());
}