我很难找到一种干净的方法来处理由启用了HATEOAS的api产生的错误。
基本上,我们的后端服务是一个spring应用程序,在出现异常时使用@ControllerAdvice将VndErrors实例返回给使用者。
VndErrors由spring-hateoas提供,一旦返回,将被序列化并标记为application/vnd.error。
在服务使用者方面,我们也使用spring-hateoas,我们通过标准的RestTemplate与后端服务进行通信。
ResponseErrorHandler中的默认RestTemplate会为客户端、服务器或u为人的http状态响应抛出异常,但无论如何它都不会试图反序列化响应体。
public MyBusinessConcept myBusinessConcept() {
try {
return restTemplate().exchange("http://foo/bar", ..., MyBusinessConcept.class).getBody();
} catch (HttpClientErrorException e) {
// ???
}
}我们如何从失败的http响应中获得VndErrors实例?
发布于 2018-10-01 08:37:15
经过大量的研究,我碰巧在其他春天的模块中找到了一个答案。
基本上,一个解决方案是实现ResponseErrorHandler接口,要么使用继承,要么使用组合(更好)回到DefaultResponseErrorHandler。实现将使用ResponseExtractor<VndErrors>反序列化我们的错误。
https://stackoverflow.com/questions/52557711
复制相似问题