Springboot的全局异常处理主要用到两个注解@ControllerAdvice和@ExceptionHandler,使用@ControllerAdvice注解的类是当前springboot程序中所有类的统一异常处理类,在该类中,使用@ExceptionHandler注解的方法来统一处理异常信息,该类对所有注解了@RequestMapping的控制器均有效。
新建一个springboot程序配置文件如下,采用thymeleaf用于页面跳转
spring.thymeleaf.cache=false
spring.web.resources.static-locations= classpath:/static/
spring.mvc.static-path-pattern= /static/**
新建一个统一全局异常处理类ExceptionHandlerController
@ControllerAdvice
public class ExceptionHandlerController {
@ExceptionHandler(value = Exception.class)
public String handlerException(Exception e){
if(e instanceof SQLException){
return "sqlError";
}else if(e instanceof MyException){
return "myError";
}else{
return "error";
}
}
}
新建一个自定义异常信息类
public class MyException extends Exception {
private static final long serialVersionUID=1L;
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
templates下新建Sql异常错误页面sqlerror.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
sql异常
</body>
</html>
templates下新建自定义异常错误页面myerror.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
自定义异常
</body>
</html>
新建一个异常控制器
@Controller
@RequestMapping("exception")
public class ExceptionController {
@RequestMapping("no")
public void no() throws Exception {
throw new MyException();
}
}
启动程序进行测试
此时在观察控制台,发现控制台并没有抛出异常