Printemps RestTemplate - Primordial ResponseErrorHandler

Je vais appeler un ReST service à travers RestTemplate et essayer de passer outre ResponseErrorHandler dans Spring 3.2 pour gérer les codes d'erreur personnalisés.

CustomResponseErrroHandler

public class MyResponseErrorHandler implements ResponseErrorHandler {

    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        boolean hasError = false;
        int rawStatusCode = response.getRawStatusCode();
        if (rawStatusCode != 200){
            hasError = true;
        }
        return hasError;
     }

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        //String body = IOUtils.toString(response.getBody());
        throw new CustomServiceException(response.getRawStatusCode() , "custom Error");
   }
}

Spring cadre invoque hasError méthode mais pas handleError, donc je ne pouvais pas jeter mon personnalisée d'exception. Après avoir fouiller dans Spring RestTemplate code source, j'ai réalisé que le code de la handleResponseError méthode est à l'origine de la question - Il est à la recherche d' response.getStatusCode ou response.getStatusText et lancer une exception (comme statusCode/statusText est nulle lorsque l' Rest service throws exception) et il n'appelle jamais personnalisé mis en œuvre ou à un défaut handleError méthode à la ligne suivante.

Spring RestTemplate code source pour handleResponse méthode:

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.getStatusCode() + " (" + response.getStatusText() + "); invoking error handler");
        }
        catch (IOException e) {
            //ignore
        }
    }
    getErrorHandler().handleError(response);
}

Pour info, bien que le service de throws exception, je peux lire rawstatuscode mais pas statuscode de réponse

Comment contourner ce cadre code et de faire appel à mon gestionnaire personnalisé?
Merci pour votre aide à l'avance.

OriginalL'auteur user3670450 | 2014-05-23