我有一个定义为
的自定义异常类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
}
如何解决自定义例外问题?
答案 0 :(得分:1)
处理异常是不正确的,在loadTasks方法中抛出异常并捕获异常,因此它不会传播。
如果你想处理无法处理的异常,例如泛型异常(Exception.class),你需要编写一个应该在常见异常处理类中处理所有这些异常的方法。
$(this).parent().css("zIndex", 3);
一旦抛出异常,永远不会在同一方法中捕获异常,请捕获发送正确响应的异常。