如何使用Spring rest客户端

时间:2015-07-16 22:06:31

标签: java spring http

我正在尝试更好地处理使用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错误页面,我只会收到一条消息,说明无法创建该对象,但是吞下了特定的错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

rce.getMostSpecificCause()你能得到什么?也许有更多的信息。

您可以捕获HttpStatusCodeException这是更通用的RestClientException的直接子类。您可以捕获的许多异常比RestClientException更具体,例如

public class HttpServerErrorException
extends HttpStatusCodeException

Exception thrown when an HTTP 5xx is received.

查看docs for RestClientException

答案 1 :(得分:0)

如果您要查询的网站返回HTTP errorstatus,那么这应该反映在响应对象中,您可以切换到您想要覆盖的状态。

switch(response.getStatus()) {
  case HTTPStatus.BAD_REQUEST: {
  }
  case HTTPStatus.BAD_GATEWAY: {
  }
...
}

只有在存在客户端错误时才会抛出RestClientException,即它独立于服务器响应。 (Spring Doc