Saltar al contenido

Manejo de excepciones Spring Resttemplate

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 DefaultResponseErrorHandlerque 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *