Spring启动异常处理程序:抛出异常

时间:2018-04-09 08:25:07

标签: spring spring-boot error-handling

使用此工作正常

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

}

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

@ExceptionHandler(value = IoTException.class)
public void IoTError() {
    throw new IoTConnectionException();
}

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

1 个答案:

答案 0 :(得分:1)

docs about exception handling州:

  

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

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

在本节中Docs Exception handler methods描述了异常处理程序方法的所有支持的返回值。