我有一个自定义的异常类定义为
public class CustomAuthenticationException extends RuntimeException{
}
从控制器方法,我抛出此异常,如下所示
@RequestMapping(value="/tasks", method=RequestMethod.GET)
public String loadTasks(HttpServletRequest request){
try
{
if (!isAuthenticatedRequest(request))
{
throw new CustomAuthenticationException();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
return "tasks/tasks";
}
为了从该控制器的范围捕获此异常,我定义了一个带有@ExceptionHandler
注释的方法,如下所示
@ExceptionHandler(CustomAuthenticationException.class)
public void handleCustomException(CustomAuthenticationException ex){
//method is not getting invoked
}
当我启动GET请求并期望通过上述方法处理异常时,我在控制台中仅获得错误堆栈跟踪。永远不会调用异常处理程序方法。
但是,使用其他已定义的异常(如)MethodArgumentNotValidException
,可以正确调用处理程序方法。例如,我使以下异常处理程序正常工作:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ErrorResponseHolder handleFieldValidationError(MethodArgumentNotValidException ex, HttpServletResponse response){
//method got invoked. do something with the exception
}
如何使用自定义例外解决问题?
处理异常是不正确的,在loadTasks方法中,您将引发异常并捕获异常,因此该异常无法传播。
如果要处理未处理的异常,例如通用异常(Exception.class),则需要编写一个应在通用异常处理类中处理所有这些异常的方法。
@ExceptionHandler(Exception.class)
public void handleUnhandledException(Exception ex){
// handle the exception here
}
一旦引发异常,就永远不要以相同的方法捕获异常,而在发送适当响应的地方捕获异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句