前言:springboot配置全局异常拦截,我们将使用 aop思想的一种实现,你告诉我需要拦截规则,我帮你把他们拦下来,具体你想做更细致的拦截筛选和拦截之后的处理,你自己通过@ControllerAdvice 配合@ExceptionHandler、@InitBinder 或 @ModelAttribute这三个注解以及被其注解的方法来自定义。
接下来我们就说
@ControllerAdvice 配合@ExceptionHandler 实现全局异常处理
使用方法,我们在类上使用@ControllerAdvice 注解,我们可以配置是进行全局配置,还是具体类的拦截
@ControllerAdvice 注解类
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Component
- public @interface ControllerAdvice {
- @AliasFor("basePackages")
- String[] value() default {};
-
- @AliasFor("value")
- String[] basePackages() default {};
-
- Class>[] basePackageClasses() default {};
-
- Class>[] assignableTypes() default {};
-
- Class extends Annotation>[] annotations() default {};
- }
配合@ExceptionHandler 实现全局异常处理
@ExceptionHandler
- @Target({ElementType.METHOD})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface ExceptionHandler {
- Class extends Throwable>[] value() default {};
- }
接收Throwable类作为参数,我们知道Throwable是所有异常的父类,所以说,可以自行指定所有异常
比如在方法上加:@ExceptionHandler(IllegalArgumentException.class),则表明此方法处理
IllegalArgumentException 类型的异常,如果参数为空,将默认为方法参数列表中列出的任何异常(方法抛出什么异常都接得住)。
例子:
- @ControllerAdvice
- @Slf4j
- @RestController
- public class GlobalExceptionHandler {
-
- @ExceptionHandler(IllegalArgumentException.class)
- public ModelAndView handleException(IllegalArgumentException e){
- ModelAndView modelAndView = new ModelAndView("error");
- modelAndView.addObject("errorMessage", "参数不符合规范!");
- return modelAndView;
- }
-
- }
具体的全局异常拦截可根据项目规则去定义