Nuestros mejores investigadores han agotado sus reservas de café, en su búsqueda día y noche por la respuesta, hasta que Paola encontró el hallazgo en GitLab y en este momento la compartimos contigo.
Solución:
Desea crear una clase que implemente ResponseErrorHandler
y luego use una instancia para configurar el manejo de errores de su plantilla de descanso:
public class MyErrorHandler implements ResponseErrorHandler
@Override
public void handleError(ClientHttpResponse response) throws IOException
// your error handling here
@Override
public boolean hasError(ClientHttpResponse response) throws IOException
...
[...]
public static void main(String args[])
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new MyErrorHandler());
Además, Spring tiene la clase DefaultResponseErrorHandler
que puede ampliar en lugar de implementar la interfaz, en caso de que solo desee anular el handleError
método.
public class MyErrorHandler extends DefaultResponseErrorHandler
@Override
public void handleError(ClientHttpResponse response) throws IOException
// your error handling here
Eche un vistazo a su código fuente para tener una idea de cómo Spring maneja los errores HTTP.
Spring trata hábilmente los códigos de error http como excepciones y asume que su código de manejo de excepciones tiene el contexto para manejar el error. Para que el intercambio funcione como se espera, haga lo siguiente:
try
return restTemplate.exchange(url, httpMethod, httpEntity, String.class);
catch(HttpStatusCodeException e)
return ResponseEntity.status(e.getRawStatusCode()).headers(e.getResponseHeaders())
.body(e.getResponseBodyAsString());
Esto devolverá todos los resultados esperados de la respuesta.
Deberías atrapar un HttpStatusCodeException
excepción:
try
restTemplate.exchange(...);
catch (HttpStatusCodeException exception)
int statusCode = exception.getStatusCode().value();
...
Acuérdate de que puedes optar por la opción de añadir una puntuación certera si te fue de ayuda.