Spring Boot异常处理程序:抛出异常

mat*_*sbe 5 error-handling spring spring-boot

使用这个效果很好

@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(value = IoTException.class)
public void IoTError() {

}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试转换为另一个自制异常时

@ExceptionHandler(value = IoTException.class)
public void IoTError() {
    throw new IoTConnectionException();
}
Run Code Online (Sandbox Code Playgroud)

异常处理程序被忽略,即IoTException发送到视图而不转换为IoTConnectionException. 但是放置断点让我进入了该IoTError方法。知道为什么吗?谢谢 :)

Jav*_*r81 9

关于异常处理状态的文档:

如果在请求映射期间发生异常或从请求处理程序(例如 @Controller)引发异常,DispatcherServlet 会委托给 HandlerExceptionResolver bean 链来解决异常并提供替代处理(通常是错误响应)。

当您抛出 IoT 异常时,对HandlerExceptionResolver链的委托已经发生,并且不会再次执行。如果此异常会触发另一个异常处理调度,则可能会导致异常循环。假设您为IoTConnectionException定义了另一个异常处理程序方法,这将抛出IoTException您将以StackOverflowException结束。

在本节文档异常处理程序方法中,描述了异常处理程序方法的所有受支持的返回值。