如何在另一台服务器发送“503状态”时使用restTempate.excute获取响应(或响应体)

时间:2017-03-31 01:03:51

标签: spring resttemplate http-status-code-503

(这是我们服务的蓝图)

webpage <-> proxy-server <-> api-server <-> datebase
[-------- my work ---------][------- not mine -------]

我使用“RestTemplate.exchange”从proxy-server向api-server发送请求。

@Override
    public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<T> responseType)
            throws RestClientException {

        Assert.notNull(requestEntity, "'requestEntity' must not be null");

        Type type = responseType.getType();
        RequestCallback requestCallback = httpEntityCallback(requestEntity, type);
        ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(type);
        return execute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor);
    }

这是我的问题。

Api服务器使用?VO生成503错误。 他们这样送我。

{
  "result": {
    "responseCode": "..."
  },
  "data": {
    "time": ...,
  }
}

但是当这个响应到达restTemplate时,restTemplate将它发送到errorHandler并捕获异常。

(in RestTemplate.java)
protected void handleResponse(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {
        ResponseErrorHandler errorHandler = getErrorHandler();
        boolean hasError = errorHandler.hasError(response); // -> hasError:true!
        ...
}

我无法在功能之外得到回应。 我是如何得到这种回应的?

1 个答案:

答案 0 :(得分:2)

你需要抓住VBA.Join例外。您将通过调用HttpStatusCodeException和正文调用getStatusCode()异常方法来获取http状态代码。

示例:

getResponseBodyAsString()