为什么我不需要在Spring Boot MVC应用程序中捕获某些异常



我有一个简单的Spring Boot MVC应用程序,我想在其中从服务层抛出异常。我用一系列@ExceptionHandler注释的方法在控制器中处理这些异常。

我不明白为什么有些异常不需要声明为抛出,而有些则需要。例如,如果我只是抛出一个

java.sql.SQLIntegrityConstraintViolationException

编译器抱怨:

java: unreported exception java.sql.SQLIntegrityConstraintViolationException; must be caught or declared to be thrown

而如果我抛出

org.springframework.dao.DataIntegrityViolationException

我既不需要声明它被抛出,也不需要在控制器中捕获它。它只是由我的ExceptionHandler处理。

有什么区别?更好的是,我在哪里可以找到这方面的文档?

这与Spring无关,它是核心Java。Java有已检查和未检查的异常。Checked需要进行检查,这些异常在编译时进行检查。如果某个方法中的某些代码抛出了已检查的异常,则该方法必须处理该异常,或者必须使用throws关键字指定该异常。另一方面,您有未检查的异常——Error或RuntimeException子类——对于这些异常,您不必声明throws我相信这个问题与许多其他问题重复:(选中此选中与未选中异常

最新更新