@ControllerAdvice
@ResponseBody
public class GlobalException {
@ExceptionHandler
@ResponseStatus
public String exceptionHandler(Exception e) {
return "全局异常------" + e.getMessage();
}
}
添加上面的类,就完成了全局异常的配置,无论是运行时异常,还是其他类型的异常,都会被捕获并处理(如果有try catch,那么还是自己进行处理,这里指的是未被捕获的异常将由全局异常进行处理)
ps:
@ResponseStatus:这个注解可以返回异常的状态码,如果去掉该注解则状态码为200
@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 {};
}
value 和 basePackages 同样的作用,用于指定包名下的类出现异常才会使用全局异常进行处理,其他包下出现异常将不被处理
@ControllerAdvice(basePackages = "com.example.firstdemo.moudle1")
assignableTypes 指定具体的类,当该类中出现异常时,全局异常将进行处理
@ControllerAdvice(assignableTypes = TestExceptionController.class)
annotations 定义哪种类型可以使用全局异常进行处理,当设置为RestController时,普通返回视图的控制器类出现异常,将不会被处理,如果不指定则两种形式的类都会被处理
@ControllerAdvice(annotations = RestController.class)
网友评论