java - 使用 OAuth2RestTemplate 在 Rest Api 调用中出现异常或错误后继续
问题描述
我正在使用 Spring Oauth2RestTemplate 进行休息通话。我试图在尝试进行restAPI调用并继续异常流程时捕获任何异常。
我尝试了两种方式:
方式 I(使用 try catch)。
public ResponseEntity<Object> getResponse(URI uri, HttpHeaders httpHeaders,
Object obj) {
ResponseEntity<Object> response = null;
try {
response = restTemplate.exchange(uri, HttpMethod.POST, new HttpEntity<>(obj, httpHeaders),
Object.class);
} catch (Exception serverEx) {
LOGGER.error("ERROR while calling API.Full Exception: ",serverEx);
response.getBody().setLink(object.getUrl());
}
return response;
}
方式二(海关处理)。
public class RestTemplateResponseErrorHandler implements ResponseErrorHandler {
private static final Logger LOGGER = LogManager.getLogger(RestTemplateResponseErrorHandler.class);
@Override
public boolean hasError(ClientHttpResponse httpResponse) throws IOException {
return (httpResponse.getStatusCode().series() == Series.CLIENT_ERROR
|| httpResponse.getStatusCode().series() == Series.SERVER_ERROR);
}
@Override
public void handleError(ClientHttpResponse httpResponse) {
//Log The Error but contibue the flow
}
}
但无论哪种方式执行都不会停止。我想继续执行流程。如果呼叫失败,我想处理它并继续流程。有人可以建议这里发生了什么吗?
例外:
Caused by: java.io.IOException: Attempted read from closed stream.
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:131)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:118)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at java.io.PushbackInputStream.read(PushbackInputStream.java:139)
at org.springframework.web.client.MessageBodyClientHttpResponseWrapper.hasEmptyMessageBody(MessageBodyClientHttpResponseWrapper.java:102)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:82)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:932)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:916)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:663)
... 223 more
错误响应 OutboundJaxrsResponse{status=500, reason=Internal Server Error, hasEntity=true, closed=false, buffered=false}
请问对此有什么建议吗?
解决方案
推荐阅读
- visual-c++ - editor able to find not included file c++
- python - Index of minimum values in a set
- go - Golang support to VSTS Git
- android - 使用 camera2 api 捕获图像
- python - Pandas - 将 JSON 中的数值设置为具有 4 位精度的浮点数
- php - 将文本文件分解为数组取决于逗号
- svn - 已检查 SVN 存储库的文件夹未显示绿色、红色勾号图标
- raspberry-pi - GPS数据解析
- azure - 如何从 ASP.NET MVC5 从 Azure BLOB 存储下载文件
- android - 在 android api 17 以下有 looper.quitSafely() 的替代方案吗?