【问题标题】:how to get response(or responsebody) using restTempate.excute when another server send me "503 status"当另一台服务器向我发送“503 状态”时如何使用 restTemplate.execute 获取响应(或响应正文)
【发布时间】:2017-08-25 03:22:15
【问题描述】:

(这是我们服务的蓝图)

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

我使用“RestTemplate.exchange”从代理服务器向 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!
        ...
}

而且我无法在函数之外得到响应。 我如何得到这个回复?

【问题讨论】:

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


    【解决方案1】:

    您需要为此捕获HttpStatusCodeException 异常。调用getStatusCode()获取http状态码,调用异常的getResponseBodyAsString()方法获取body。

    示例:

    try {
        restTemplate.exchange(...);
    } catch (HttpStatusCodeException e) {
        return new ResponseEntity<>(e.getResponseBodyAsString(), e.getStatusCode());
    }
    

    【讨论】:

    • 感谢您的回答。同样,我创建了新的 Exception.class 和 ControllerAdvice.class 并成功捕获它们。
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2014-09-28
    • 2021-07-01
    相关资源
    最近更新 更多