前言
如果能将所有类型的异常处理从各层中解耦出来,则既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。幸运的是,Spring框架支持这样的实现。接下来将从自定义error页面。@ExceptionHandler注解以及@ControllerAdvice3种方式讲解Spring Boot应用的异常统一处理
具体处理步骤如下:
自定义error页面
在Spring Boot Web应用的src/main/resources/templates 目录下添加error.html页面 访问发生错误或异常时,Spring Boot将自动找到该页面作为错误页面。Spring Boot为错误页面提供了以下属性
- timestamp 错误发生时间
- status HTTP状态码
- error 错误原因
- exception 异常的类名
- message 异常消息
- errors BindingResult异常里的各种错误
- trace 异常跟踪信息
- path 错误发生时请求的URL路径
1: 创建名为com.ch.ch5_3.exception的包 并在该包中创建名为MyException 具体代码如下
package com.ch.ch5_3.exception;
public class MyException extends Exception {
private static final long serialVersionUID = 1L;
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
2:创建控制器类TestHandleExceptionController
创建名为com.ch,ch5_3.controller的包 并在该包中创建名为TestHandleExceptionController的控制器类,在该控制器类中,在4个请求处理方法,一个是导航到index.html 另外三个分别抛出不同的异常 部分代码如下
package com.ch.ch5_3.controller;
import java.sql.SQLException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
public void db() throws SQLException {
throw new SQLException("数据库异常");
}
@RequestMapping("/my")
public void my() throws MyException {
throw new MyException("自定义异常");
}
@RequestMapping("/no")
public void no() throws Exception {
throw new Exception("未知异常");
}
}
3:View视图页面
Thymeleaf模板默认将视图页面放在src/main/resources/templates目录下。因此我们在src/main/resources/templates 目录下新建html页面文件,index.html和error.html
在index.html页面中 有4个超链接请求,3个请求在控制器中有对应处理,另一个请求是404错误
部分代码如下

