📅  最后修改于: 2023-12-03 15:23:08.079000             🧑  作者: Mango
在 Spring 框架中,当发生异常时,系统会根据一定的异常处理顺序去尝试解决这个异常。其中,在默认的异常处理器 DefaultHandlerExceptionResolver 中,会提供一些默认的异常处理方案。而如果你自己定义了一个异常处理器 CustomExceptionHandler,有时你会发现它并没有被调用到,这是为什么呢?
在 Spring 的默认异常处理器 DefaultHandlerExceptionResolver 中,会提供一些默认的异常处理方案。这些方案包括:
可以看出,这些异常处理器已经对一些常见的异常做了处理,并且它们的优先级也比较高,因此在这些异常发生时,CustomExceptionHandler 就不会被调用了。
要让 CustomExceptionHandler 生效,我们需要在 DefaultHandlerExceptionResolver 中将其优先级调高。可以通过在 Spring 配置文件中添加以下代码来实现:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="com.example.CustomException">customExceptionHandler</prop>
</props>
</property>
<property name="defaultErrorView" value="error" />
<property name="order" value="10" />
</bean>
其中,order 的值越小,优先级越高,我们将其设为 10,任何情况下都要高于默认异常处理器中的处理方案。
CustomExceptionHandler 中不起作用的原因是因为它的优先级不够高,被默认异常处理器中的处理方案所覆盖。通过在 Spring 配置文件中设置优先级,我们可以避免这种情况的发生,确保 CustomExceptionHandler 能够被正确调用。