Frühjahr RestTemplate - Überschreiben ResponseErrorHandler

Rufe ich eine ReST service durch RestTemplate und versuchen, zu überschreiben ResponseErrorHandler im Spring 3.2 zu handhaben benutzerdefinierte Fehlercodes.

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 framework ruft hasError Methode aber nicht handleError, so konnte ich nicht werfen meine eigene exception. Nach dem eintauchen in Spring RestTemplate source-code, erkannte ich, dass der code in handleResponseError Methode ist, die das Problem verursachen - Es ist auf der Suche nach response.getStatusCode oder response.getStatusText und werfen Ausnahme (wie statusCode/statusText ist null, wenn Rest service wirft exception) und es nie ruft entweder individuell implementiert oder Standard - handleError Methode in der nächsten Zeile.

Spring RestTemplate - source-code für handleResponse Methode:

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);
}

FYI, während service-wirft exception, ich kann Lesen rawstatuscode aber nicht statuscode aus der Antwort

Wie man dies umgehen framework-code und rufen Sie meine benutzerdefinierte handler?
Vielen Dank für Eure Hilfe im Voraus.

InformationsquelleAutor user3670450 | 2014-05-23
Schreibe einen Kommentar