首页 > 解决方案 > 使用 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}

请问对此有什么建议吗?

标签: javaspringexceptioncustom-error-handling

解决方案


推荐阅读