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.
- Sie können prüfen, brüllen thread. stackoverflow.com/a/51805956/3073945
- stackoverflow.com/questions/38093388/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende link enthält nützliche Informationen über Ausnahme-Flow für Frühjahr ResponseErrorHandler .
Hinzufügen von code hier, nur im Fall der blog ist down:
Code für ErrorHandler:
Code für die Verwendung in RestTemplate:
Ich nicht sehen, Ihr
RestTemplate
code, aber ich nehme an, Sie setzen IhreResponseErrorHandler
fürRestTemplate
zu verwenden wie:Ausnahme ist in der Tat geworfen
handleError
Methode. Sie können herausfinden, wie zu werfenCustomException
mitCustomResponseHandler
aus einer meiner früheren Antworten.