Spring中@ExceptionHandler无法捕获CustomRuntimeException问题求助
问题排查与修复方案
核心问题分析
你的异常捕获方案失效,根源是两个关键错误:
- 方法权限错误:
@ExceptionHandler标注的处理方法必须是public,Spring容器无法调用private修饰的方法 - 参数类型不匹配:你抛出的是
CustomRuntimeException,但处理方法的参数是CustomException,类型不匹配导致无法触发捕获逻辑
修复后的代码示例
@ControllerAdvice public class CustomExceptionManager { // 其他代码 @ExceptionHandler({CustomRuntimeException.class}) @ResponseBody public ResponseEntity<ErrorResource> handleCustomException(CustomRuntimeException e, HttpServletRequest request, HttpServletResponse response) { logger.error("unhandled exception: ", e); // 其他业务逻辑代码 } }
额外验证项
- 确认
CustomRuntimeException正确继承自RuntimeException或其子类 - 确保
CustomExceptionManager所在包被Spring的组件扫描机制覆盖(比如在@ComponentScan指定的范围内) - 若存在多个
@ControllerAdvice类,检查是否有其他处理器优先级更高,抢占了当前异常的处理权
内容的提问来源于stack exchange,提问作者Lorenzo D'Isidoro
相关产品推荐
相关产品推荐

