前言: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;
}
}
具体的全局异常拦截可根据项目规则去定义
版权声明:本文为qq_42281649原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。