Я изо всех сил пытаюсь найти чистый способ обработки ошибок, вызванных API с поддержкой HATEOAS.
По сути, наш бэкэнд-сервис - это весеннее приложение, которое в случае исключений использует @ControllerAdvice
для возврата VndErrors
экземпляр возвращается к потребителю.
VndErrors
предоставляется spring-hateoas
и после возврата будет сериализован и помечен как application/vnd.error
.
В части потребителя услуг, которую мы также используем spring-hateoas
и мы общаемся с бэкэнд-сервисом через стандартный RestTemplate
.
По умолчанию ResponseErrorHandler
в RestTemplate
выдает исключения для ответов статуй клиента, сервера или неизвестного http, но он не пытаетсядесериализовать тело ответа в любом случае.
public MyBusinessConcept myBusinessConcept() {
try {
return restTemplate().exchange("http://foo/bar", ..., MyBusinessConcept.class).getBody();
} catch (HttpClientErrorException e) {
// ???
}
}
Как мы можем получить экземпляр VndErrors
из неудачного ответа http?