J'ai un webservice qui obtient des données d'un autre service web et retourne au navigateur.Comment gérer HttpClientException correctement
- Je veux cacher les erreurs des clients internes
- voulez jeter 404, 400 etc qui sont renvoyés par le webservice dans la méthode ci-dessous.
Comment résoudre ce problème d'une manière ordonnée?
L'option 1 ou l'option 2 est-elle propre?
Option 1
public <T> Optional<T> get(String url, Class<T> responseType) {
String fullUrl = url;
LOG.info("Retrieving data from url: "+fullUrl);
try {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(ImmutableList.of(MediaType.APPLICATION_JSON));
headers.add("Authorization", "Basic " + httpAuthCredentials);
HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<T> exchange = restTemplate.exchange(fullUrl, HttpMethod.GET, request, responseType);
if(exchange !=null)
return Optional.of(exchange.getBody());
} catch (HttpClientErrorException e) {
LOG.error("Client Exception ", e);
throw new HttpClientError("Client Exception: "+e.getStatusCode());
}
return Optional.empty();
}
(ou)
Option 2
public <T> Optional<T> get(String url, Class<T> responseType) {
String fullUrl = url;
LOG.info("Retrieving data from url: "+fullUrl);
try {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(ImmutableList.of(MediaType.APPLICATION_JSON));
headers.add("Authorization", "Basic " + httpAuthCredentials);
HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<T> exchange = restTemplate.exchange(fullUrl, HttpMethod.GET, request, responseType);
if(exchange !=null)
return Optional.of(exchange.getBody());
throw new RestClientResponseException("", 400, "", null, null, null);
} catch (HttpStatusCodeException e) {
LOG.error("HttpStatusCodeException ", e);
throw new RestClientResponseException(e.getMessage(), e.getStatusCode().value(), e.getStatusText(), e.getResponseHeaders(), e.getResponseBodyAsByteArray(), Charset.defaultCharset());
}
return Optional.empty();
}
Quel est le problème avec le code ci-dessus? Vous utilisez le code d'état de l'exception interne et le placez dans une nouvelle exception, en masquant l'exception interne. – f1sh
Option2 est moche ... Option1 est beaucoup mieux. Mais je vous suggère de séparer le gestionnaire d'erreurs. Créer un intercepteur qui implémente "ResponseErrorHandler" fourni par le printemps là vous pouvez gérer tous les messages d'erreur afin que votre code sera beaucoup plus propre et vous n'avez pas besoin d'utiliser essayer, attraper le bloc – VelNaga
pouvez-vous me montrer un exemple approprié? Merci. – Minisha