Filtro CPL Polarizado ventajas

Error Handling REST API in Spring Boot with @ControllerAdvice @ExceptionHandler

 En esta entrada veremos como implementar un error handling usando las anotaciones @ControllerAdvice y @ExceptionHandler de Spring Boot extendiendo de ExceptionHandlerExceptionResolver.

 


Nuestras respuestas serán personalizadas.

Validaremos los headers, body, tipo de dato en el header, el path, parámetros en el body y tipo, tipo de solicitud HTTP, etc.

Implementaremos los errores para las siguientes excepciones:

  • HttpRequestMethodNotSupportedException
         Se ejecutara cuando el tipo de método HTTP (POST,GET,PUT, etc.) no sea el que el endpoint está esperando.
  • HttpMediaTypeNotSupportedException
           Se ejecutará cuando el contenido de la petición no sea soportado y esperado por el endpoint.
  • MissingRequestHeaderException
            Se ejecutará cuando no existan los headers requeridos por el endpoint.
  • HttpMessageNotReadableException
            Se ejecutará cuando el body venga incompleto y sea requerido por el endpoint.
  • MethodArgumentNotValidException
            Se ejecutará cuando en el body los datos no sean del tipo requerido, se detona cuando @Valid detecta errores.
  • ConstraintViolationException
            Se ejecutará cuando en el body falten parámetros o vengan vacíos.
  • MethodArgumentTypeMismatchException
            Se ejecutará cuando en el valor de un header no es del tipo correcto requerido. Ejemplo, cuando envió un dato int en lugar de un String.
  • NoHandlerFoundException
            Se ejecutará cuando la ruta o path no exista o que un endpoint no coincida con el nombre.  

 En otras palabras, cuando una de estas excepciones ocurra en nuestra API, automáticamente nuestro error handler detonará con una respuesta personalizada que definamos.

Nuestra respuesta tendrá la siguiente estructura:

Tendrá un mensaje y un arreglo de detalles de tipo String.

Nuestro endpoint o Controller es el siguiente

Para este ejemplo iremos haciendo la prueba con el endpoint insertPerson(), tanto el header como el body son requeridos, sólo requerimos un header de tipo int y se llama idPais.
En el objeto Persona he colocado las siguientes anotaciones para validar todos los parámetros del body @NotEmpty nos sirve para indicarle que no deben venir null o vacíos.
 
Finalmente nuestra clase de excepciones es la siguiente: En el caso de la excepción NoHandlerFoundException tenemos que configurar en el application.properties las siguientes lineas para que pueda responder correctamente:
Esto sería todo de mi parte. Cualquier duda o pregunta con gusto estaré respondiendo.
 
Dejo el link hacia el proyecto completo en github
 

 

 
  


Comentarios