我正在尝试更好地处理使用sprint rest客户端时的错误响应。我的代码如下:
ResponseEntity<Foo> response = null;
try {
response = restTemplate.exchange(uri, HttpMethod.GET,
new HttpEntity<>(new HttpHeaders()), Foo.class);
catch (RestClientException rce) {
//what to do here?
}
只要没有错误,这个效果很好。问题是,当相应的Web服务返回错误(或超时)时,我只是得到一个例外。没有带有状态代码的枚举,我可以按照自己的意愿处理它。有时,错误消息很有用。有时不是。通常,如果相应的服务器返回一个html错误页面,我只会收到一条消息,说明无法创建该对象,但是吞下了特定的错误。
有什么想法吗?
答案 0 :(得分:1)
rce.getMostSpecificCause()
你能得到什么?也许有更多的信息。
您可以捕获HttpStatusCodeException
这是更通用的RestClientException
的直接子类。您可以捕获的许多异常比RestClientException
更具体,例如
public class HttpServerErrorException
extends HttpStatusCodeException
Exception thrown when an HTTP 5xx is received.
答案 1 :(得分:0)
如果您要查询的网站返回HTTP errorstatus,那么这应该反映在响应对象中,您可以切换到您想要覆盖的状态。
switch(response.getStatus()) {
case HTTPStatus.BAD_REQUEST: {
}
case HTTPStatus.BAD_GATEWAY: {
}
...
}
只有在存在客户端错误时才会抛出RestClientException,即它独立于服务器响应。 (Spring Doc)