Я обрабатываю несколько запросов, делая вызов RESTFul (Spring RestTemplate) третьим лицам.В коде я пытаюсь обработать следующее условие.
catch (final Exception ex) {
if (ex instanceof HttpClientErrorException) {
HttpClientErrorException hcee = (HttpClientErrorException)ex;
if(hcee.getStatusCode() == NOT_FOUND) {
throw new MyRecordNotFoundException(hcee);
}
}else {
handleRestClientException(ex, Constants.MYAPP);
}
Вот реализация handleRestClientException
protected Exception handleRestClientException(Exception ex, String serviceName) throws Exception{
if (ex instanceof RestClientResponseException) {
RestClientResponseException rcre = (RestClientResponseException) ex;
throw new RestClientResponseException(serviceName, rcre.getRawStatusCode(),
rcre.getStatusText(), rcre.getResponseHeaders(), rcre.getResponseBodyAsByteArray(), null);
} else {
throw new Exception(serviceName, ex);
}
Но все org.springframework.web.client.RestTemplate.getForObject (String url, Class responseType, Map urlVariables) выдает RestClientException
, который является родителем HttpClientErrorException
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
org.springframework.core.NestedRuntimeException
org.springframework.web.client.RestClientException
org.springframework.web.client.RestClientResponseException
org.springframework.web.client.HttpStatusCodeException
org.springframework.web.client.HttpClientErrorException
Таким образом, условие if, упомянутое в моем коде, никогда не достигает, поскольку оно обрабатывается.
Не могли бы вы помочь мне эффективно обработать каждое исключение в этой иерархии?