Je devrais appeler un service de mon application qui peut retourner des codes inhabituels d'état HTTP, tels que 230, 240, etc. Par gestionnaire d'erreurs par défaut J'obtiens:Spring RestTemplate poignée code d'état personnalisé
Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.UnknownHttpStatusCodeException: Unknown status code [230] null] with root cause...
Quand je utiliser mon gestionnaire d'erreur personnalisé Je peux éviter cela:
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
int status = response.getRawStatusCode();
if (status >= 200 && status <= 299)
return false;
HttpStatus statusCode = response.getStatusCode();
if (statusCode.is2xxSuccessful())
return false;
HttpStatus.Series series = statusCode.series();
return (HttpStatus.Series.CLIENT_ERROR.equals(series)
|| HttpStatus.Series.SERVER_ERROR.equals(series));
}
Mais quand RestTmplate tente de récupérer tombe dans la même exception MessageBodyClientHttpResponseWrapper
:
public boolean hasMessageBody() throws IOException {
HttpStatus responseStatus = this.getStatusCode();
if (responseStatus.is1xxInformational() || responseStatus == HttpStatus.NO_CONTENT ||
responseStatus == HttpStatus.NOT_MODIFIED) {
return false;
}
else if (this.getHeaders().getContentLength() == 0) {
return false;
}
return true;
}
Comment puis-je obtenir un corps de réponse correctement?
HttpStatus de Spring est une énumération, et il n'y a pas de support pour les codes HTML non affectés. Vous avez essentiellement deux options: 1. remplacer tout le code incriminé (utilisez vos propres implémentations qui ne s'appellent pas à cette énumération, en utilisant uniquement le code d'état brut) sur le chemin de traitement de ces réponses; 2. demande l'amélioration de l'équipe de printemps (il y en a peut-être déjà une) (https://jira.spring.io/browse/SPR-14205)). –