Java Spring@ExceptionHandler行为
假设我在应用程序中使用了@ExceptionHandler 如果我定义:Java Spring@ExceptionHandler行为,java,spring,exception-handling,Java,Spring,Exception Handling,假设我在应用程序中使用了@ExceptionHandler 如果我定义: @ControllerAdvice public class MyExceptionHandler { @ExceptionHandler(value = Exception.class) public boolean generic(Exception e) { return e; } @ExceptionHandler(value =MyException.class
@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处理程序)?异常处理程序将尝试查找特定的异常(
MyException
)处理程序首先,如果没有,它将尝试查找通用异常(异常
)
因此,对于您的示例,当控制器抛出MyException
时,处理程序将调用MyException
处理程序
异常参数:声明为一般异常或
更具体的异常。如果
注释本身不会通过其
{@link#value()}。请求和/或响应对象(Servlet API
或Portlet API)
参考:异常处理程序将首先尝试查找特定异常(MyException
)处理程序,否则将尝试查找通用异常(异常
)
因此,对于您的示例,当控制器抛出MyException
时,处理程序将调用MyException
处理程序
异常参数:声明为一般异常或
更具体的异常。如果
注释本身不会通过其
{@link#value()}。请求和/或响应对象(Servlet API
或Portlet API)
参考:这可能会帮助您:是的,谢谢!当发生异常时,“ExceptionHandlerExceptionResolver将迭代这些ExceptionHandlerMethodResolver,并使用第一个可以处理异常的方法。”部分正是我所需要的。如果需要,您可以使用@order
订购。这可能会帮助您:是的,谢谢!当出现异常时,“ExceptionHandlerExceptionResolver将迭代这些ExceptionHandlerMethodResolver,并使用第一个可以处理异常的方法。”部分正是我所需要的。如果需要的话,你可以用@order
命令它们。好的,那么你说只会触发一个处理程序:具有最佳匹配的处理程序。好的,那么你说只会触发一个处理程序:具有最佳匹配的处理程序。