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 :
Agradecemos que quieras añadir valor a nuestra información cooperando tu experiencia en las observaciones.