使用@ExceptionHandler注释方法不处理自定义异常

时间:2016-04-21 07:03:49

标签: java spring spring-mvc

我有一个定义为

的自定义异常类
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
    }

如何解决自定义例外问题?

1 个答案:

答案 0 :(得分:1)

处理异常是不正确的,在loadTasks方法中抛出异常并捕获异常,因此它不会传播。

如果你想处理无法处理的异常,例如泛型异常(Exception.class),你需要编写一个应该在常见异常处理类中处理所有这些异常的方法。

$(this).parent().css("zIndex", 3);

一旦抛出异常,永远不会在同一方法中捕获异常,请捕获发送正确响应的异常。