当另一台服务器向我发送“503 状态”时如何使用 restTempate.excute 获得响应(或响应体)
how to get response(or responsebody) using restTempate.excute when another server send me "503 status"
(这是我们服务的蓝图)
webpage <-> proxy-server <-> api-server <-> datebase
[-------- my work ---------][------- not mine -------]
我使用 "RestTemplate.exchange".
从代理服务器向 api 服务器发送请求
@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!
...
}
而且我无法在函数之外得到响应。
我如何获得此回复?
您需要为此捕获 HttpStatusCodeException
异常。您将通过调用 getStatusCode()
获得 http 状态代码,通过调用异常的 getResponseBodyAsString()
方法获得正文。
示例:
try {
restTemplate.exchange(...);
} catch (HttpStatusCodeException e) {
return new ResponseEntity<>(e.getResponseBodyAsString(), e.getStatusCode());
}
(这是我们服务的蓝图)
webpage <-> proxy-server <-> api-server <-> datebase
[-------- my work ---------][------- not mine -------]
我使用 "RestTemplate.exchange".
从代理服务器向 api 服务器发送请求@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!
...
}
而且我无法在函数之外得到响应。 我如何获得此回复?
您需要为此捕获 HttpStatusCodeException
异常。您将通过调用 getStatusCode()
获得 http 状态代码,通过调用异常的 getResponseBodyAsString()
方法获得正文。
示例:
try {
restTemplate.exchange(...);
} catch (HttpStatusCodeException e) {
return new ResponseEntity<>(e.getResponseBodyAsString(), e.getStatusCode());
}