Spring @ExceptionHandler行为

时间:2017-08-11 13:40:53

标签: java spring exception-handling

让我们说我在我的应用程序中使用 @ExceptionHandler

如果我定义:

@ControllerAdvice
public class MyExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public boolean generic(Exception e) {
        return e;
    }

    @ExceptionHandler(value =MyException.class)
    public boolean myException(MyException e) {
        return e;
    }
}

我的控制器抛出 MyException ,是否也会触发泛型异常处理程序,或者只执行与异常的最佳匹配(此处为MyException处理程序) ?

1 个答案:

答案 0 :(得分:2)

异常处理程序会首先尝试查找特定异常MyException处理程序,否则会尝试找到通用例外Exception)。

因此,对于您的示例,当控制器throw MyException时,处理程序将调用MyException处理程序。

  

异常参数:声明为一般异常或声明   更具体的例外。这也可以作为映射提示   注释本身不会通过它缩小异常类型   {@link #value()}。请求和/或响应对象(Servlet API   或Portlet API)。

参考:https://github.com/spring-projects/spring-framework/blob/5f4d1a4628513ab34098fa3f92ba03aa20fc4204/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java#L33