Saltar al contenido

Cómo devolver una excepción en JSON en Spring Boot

Después de consultar con expertos en el tema, programadores de deferentes ramas y profesores dimos con la solución al problema y la compartimos en este post.

Solución:

Suponga que tiene una clase de excepción personalizada NotFoundException y sus implementaciones algo como esto:

public class NotFoundException extends Exception 

    private int errorCode;
    private String errorMessage;

    public NotFoundException(Throwable throwable) 
        super(throwable);
    

    public NotFoundException(String msg, Throwable throwable) 
        super(msg, throwable);
    

    public NotFoundException(String msg) 
        super(msg);
    

    public NotFoundException(String message, int errorCode) 
        super();
        this.errorCode = errorCode;
        this.errorMessage = message;
    


    public void setErrorCode(int errorCode) 
        this.errorCode = errorCode;
    

    public int getErrorCode() 
        return errorCode;
    

    public void setErrorMessage(String errorMessage) 
        this.errorMessage = errorMessage;
    

    public String getErrorMessage() 
        return errorMessage;
    

    @Override
    public String toString() 
        return this.errorCode + " : " + this.getErrorMessage();
    

Ahora desea lanzar alguna excepción desde el controlador. Si lanza una excepción, debe capturarla desde una clase de controlador de errores estándar, digamos, por ejemplo, en primavera que proporcionan @ControllerAdvice anotación que se aplicará para crear una clase Controlador de errores estándar. Cuando se aplica a una clase, este componente de resorte (me refiero a la clase que anotó) puede detectar cualquier excepción lanzada desde el controlador. Pero necesitamos mapear la clase de excepción con el método adecuado. Así que definimos un método con su excepción. NotFoundException controlador algo como a continuación.

@ControllerAdvice
public class RestErrorHandler 

    @ExceptionHandler(NotFoundException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public Object processValidationError(NotFoundException ex) 
        String result = ex.getErrorMessage();
        System.out.println("###########"+result);
        return ex;
    

quieres enviar Estado de http al error del servidor interno (500)así que aquí usamos @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR). Como usaste Spring-boot, no necesitas hacer un json string excepto una simple anotación @ResponseBody puede hacer eso por ti automágicamente.

Cree una excepción personalizada.

public class SecurityException extends RuntimeException 

    private static final long serialVersionUID = -7806029002430564887L;

    private String message;

    public SecurityException() 
    

    public SecurityException(String message) 
        this.message = message;
    

    public String getMessage() 
        return message;
    

    public void setMessage(String message) 
        this.message = message;
    


Cree una entidad de respuesta personalizada.

public class SecurityResponse 

    private String error;

    public SecurityResponse() 

    

    public SecurityResponse(String error) 
        this.error = error;
    

    public String getError() 
        return error;
    

    public void setError(String error) 
        this.error = error;
    


Cree un ControllerAdvice con ExceptionHandler para la excepción personalizada, manejará la excepción personalizada, completará y devolverá la respuesta personalizada como se muestra a continuación.

@ControllerAdvice
public class SecurityControllerAdvice 

    @ExceptionHandler(SecurityException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public SecurityResponse handleSecurityException(SecurityException se) 
        SecurityResponse response = new SecurityResponse(se.getMessage());
        return response;
    

Lance la excepción personalizada según su condición.

throw new SecurityException("Date time format is invalid");

Ahora ejecute y pruebe su aplicación. P.EJ :

ingrese la descripción de la imagen aquí

Agradecemos que quieras añadir valor a nuestra información cooperando tu experiencia en las observaciones.

¡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 *