2017-08-23 1 views
2

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?

+1

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)). –

Répondre