diff --git a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java index bd7908b847..e5c254e83b 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -104,6 +104,7 @@ import org.springframework.web.util.UriTemplate; * @author Arjen Poutsma * @author Brian Clozel * @author Roy Clarkson + * @author Juergen Hoeller * @since 3.0 * @see HttpMessageConverter * @see RequestCallback @@ -566,12 +567,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat requestCallback.doWithRequest(request); } response = request.execute(); - if (!getErrorHandler().hasError(response)) { - logResponseStatus(method, url, response); - } - else { - handleResponseError(method, url, response); - } + handleResponse(url, method, response); if (responseExtractor != null) { return responseExtractor.extractData(response); } @@ -590,29 +586,33 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } } - private void logResponseStatus(HttpMethod method, URI url, ClientHttpResponse response) { + /** + * Handle the given response, performing appropriate logging and + * invoking the {@link ResponseErrorHandler} if necessary. + *

Can be overridden in subclasses. + * @param url the fully-expanded URL to connect to + * @param method the HTTP method to execute (GET, POST, etc.) + * @param response the resulting {@link ClientHttpResponse} + * @throws IOException if propagated from {@link ResponseErrorHandler} + * @see #setErrorHandler + * @since 4.1.6 + */ + protected void handleResponse(URI url, HttpMethod method, ClientHttpResponse response) throws IOException { + ResponseErrorHandler errorHandler = getErrorHandler(); + boolean hasError = errorHandler.hasError(response); if (logger.isDebugEnabled()) { try { logger.debug(method.name() + " request for \"" + url + "\" resulted in " + - response.getRawStatusCode() + " (" + response.getStatusText() + ")"); + response.getRawStatusCode() + " (" + response.getStatusText() + ")" + + (hasError ? "; invoking error handler" : "")); } catch (IOException ex) { // ignore } } - } - - private void handleResponseError(HttpMethod method, URI url, ClientHttpResponse response) throws IOException { - if (logger.isWarnEnabled()) { - try { - logger.warn(method.name() + " request for \"" + url + "\" resulted in " + - response.getRawStatusCode() + " (" + response.getStatusText() + "); invoking error handler"); - } - catch (IOException ex) { - // ignore - } + if (hasError) { + errorHandler.handleError(response); } - getErrorHandler().handleError(response); } /**