@ControllerAdvice拦截接口没有拦截手动抛出异常
时间: 2023-10-27 17:19:51 浏览: 208
如果使用@ControllerAdvice注解拦截接口时,没有拦截到手动抛出的异常,可能是以下原因:
1. 异常类型不匹配:@ControllerAdvice通常是根据异常类型来拦截异常的,如果手动抛出的异常类型与拦截的异常类型不匹配,就不会被拦截。可以尝试在@ControllerAdvice注解中添加拦截的异常类型,例如:
```
@ControllerAdvice(Exception.class)
public class GlobalExceptionHandler {
// ...
}
```
2. 异常未被捕获:如果手动抛出异常时,没有被try-catch语句捕获,而是直接抛出到调用栈上,就不会被@ControllerAdvice拦截。可以尝试在抛出异常的方法上添加throws声明,或者在调用该方法时使用try-catch语句捕获异常。
3. 拦截器顺序问题:如果项目中使用了多个拦截器,可能存在拦截器顺序问题,导致@ControllerAdvice无法拦截异常。可以尝试在拦截器中调整拦截器的顺序,或者在@ControllerAdvice注解中添加优先级,例如:
```
@ControllerAdvice(priority = 1)
public class GlobalExceptionHandler {
// ...
}
```
4. 拦截器未激活:如果没有激活拦截器,@ControllerAdvice也无法拦截异常。可以尝试在配置文件中激活拦截器,例如:
```
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
```
总之,如果使用@ControllerAdvice注解拦截接口时,没有拦截到手动抛出的异常,可以从异常类型、异常捕获、拦截器顺序和拦截器激活等方面进行排查。
阅读全文