Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

  1. ResponseStatusException

    Útil para devolver un error de forma correcta y rápida, sin preocuparnos de los datos devueltos.

    Se construye la excepción pasándole el status code HTTP de error deseado y Spring Boot la captura y maneja de forma automática.
    Devuelve el modelo de respuesta estándar (ver siguiente apartado).


    Ventajas: rápido, status code parametrizable.
    Desventajas: Modelo de respuesta fijo.

    Ejemplo:

    Bloque de código
    languagejava
    themeEclipse
    titleEjemplo de uso de ResponseStatusException
    .....
    } catch ( final TestException e2 ) {
        //Se captura una excepción existente y se lanza una nueva ResponseStatusException
    	log.error( "Test de prueba de ResponseStatusException con custom FundeWebJSErrorAttributtes: {}",e2.getMessage() );
    	throw new ResponseStatusException( HttpStatus.INTERNAL_SERVER_ERROR, e2.getMessage(),e2.getCause() );
    
    } ....

    FuenteRest handleError (https://gitlab.um.es/mncs/fundewebjsshowcase-api/-/blob/desarrollo/src/main/java/es/um/atica/fundewebjsshowcasebackend/services/rest/impl/RestTestImpl.java).

    Petición:

    Bloque de código
    languagexml
    titleRequest ResponseStatusException
    https://fundewebjsshowcasedesa.um.es/api/v1.0/public/handleError/5

    Respuesta:

    Bloque de código
    languagejson
    titleResponse ResponseStatusException
    {
        "fecha": "05/10/2021 10:31:27",
        "estado": "INTERNAL_SERVER_ERROR",
        "mensaje": "2. ResponseStatusException con FundeWebJSErrorAttributtes",
        "tipoRespuesta": "CUSTOM_DefaultErrorAttributes"
    }


    1.1 ResponseStatus:

    La excepción ResponseStatusException es una evolución de otro mecanismo, la notación @ResponseStatus .
    Por comodidad se recomienda usar ResponseStatusException, pero es posible seguir usando esta notación declarándola nuestras excepciones y lanzándolas desde nuestra API REST directamente. 
    Ver: Ejemplo ResponseStatus (https://gitlab.um.es/mncs/fundewebjsshowcase-api/-/blob/desarrollo/src/main/java/es/um/atica/fundewebjsshowcasebackend/exceptions/TestResponseStatusException.java).

    Ejemplo ejecución:

    Bloque de código
    languagejava
    themeEclipse
    titleEjemplo declaración y uso @ResponseStatus
    ...
    @ResponseStatus( code = HttpStatus.BAD_REQUEST, reason = "Reason en ResponseStatus", value = HttpStatus.INTERNAL_SERVER_ERROR )
    public class TestResponseStatusException extends RuntimeException
    ..../
    
    } catch ( final TestResponseStatusException e1 ) {
    
       log.error( "Test de prueba de notación @ResponseStatus con custom FundeWebJSErrorAttributtes: {}",
       e1.getMessage() );
       throw e1;
    }
    ...



    Bloque de código
    titleRequest con @ResponseStatus
    https://fundewebjsshowcasedesa.um.es/api/v1.0/public/handleError/1


    Bloque de código
    languagejson
    titleRespuesta con @ResponseStatus
    {
        "fecha": "05/10/2021 10:45:25",
        "estado": "BAD_REQUEST",
        "mensaje": "1. Notación ResponseStatus con FundeWebJSErrorAttributtes",
        "tipoRespuesta": "CUSTOM_DefaultErrorAttributes"
    }



    DefaultErrorAttributes

    Definición del modelo de respuesta estándar.
    Se puede modificar y declarar para configurar un modelo de respuesta común para toda la aplicación.

    Poner código de servicio y enlaces a gitlab.
    Poner petición y respuesta ejemplo de postman.


  2. ExceptionHandler


    Manejar excepciones de forma local, permite modificar valores de la respuesta http así como el modelo.

    Desventajas: solo funciona de forma local.

    Poner código de servicio y enlaces a gitlab.
    Poner petición y respuesta ejemplo de postman.
  3. ControllerAdvice

    Permite centralizar el manejo de excepciones para que se capturen de forma global.

    Poner código de servicio y enlaces a gitlab.
    Poner petición y respuesta ejemplo de postman.

...