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

Java 为什么我不需要在Spring Boot MVC应用程序中捕获某些异常?,java,spring,spring-boot,exception,Java,Spring,Spring Boot,Exception,我有一个简单的Spring Boot MVC应用程序,我想在其中从服务层抛出异常。我使用一系列@ExceptionHandler注释方法在控制器中处理这些异常 我不明白为什么有些异常不需要声明为抛出,而有些则需要声明为抛出。例如,如果我简单地抛出一个 java.sql.SQLIntegrityConstraintViolationException 编译器抱怨: java:未报告的异常java.sql.SQLIntegrityConstraintViolationException;必须捕获或声

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

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

java.sql.SQLIntegrityConstraintViolationException

编译器抱怨:

java:未报告的异常java.sql.SQLIntegrityConstraintViolationException;必须捕获或声明要抛出

如果我扔一个

org.springframework.dao.DataIntegrityViolationException

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


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

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

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