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.
stackoverflow.com/questions/38093388/...
OriginalL'auteur user3670450 | 2014-05-23
Vous devez vous connecter pour publier un commentaire.
Lien suivant contient des informations utiles sur Exception Flux pour le Printemps ResponseErrorHandler .
L'ajout de code ici, juste au cas où le blog est en panne:
Code pour ErrorHandler:
Code de l'utiliser dans RestTemplate:
springinpractice.com/2013/10/07/...
OriginalL'auteur Abhijeet
Je ne vois pas votre
RestTemplate
code, mais je suppose que vous pour définir votreResponseErrorHandler
pourRestTemplate
à utiliser comme:L'exception est en effet jeté dans
handleError
méthode. Vous pouvez trouver la façon de lancerCustomException
à l'aide deCustomResponseHandler
de une de mes précédentes réponses.Pour info, Il n'est pas d'arriver, soit personnalisé ou par défaut HandleError() pour lancer CustomException comme exception est levée en appelant la méthode handleResponseError() statuscode est null.
springinpractice.com/2013/10/07/...
OriginalL'auteur nilesh