Spring Boot:异常处理

    xiaoxiao2022-07-12  127

    SpringBoot:异常处理页面

    静态异常页面固定错误类型不固定错误类型 动态异常页面thymeleafjsp 在Spring Boot中,异常的统一处理,可以使用Spring中的@ControllerAdvice来处理,也可以通过自定义处理

    静态异常页面

    在Controller中创建一个异常程序

    @RequestMapping("/errors") @ResponseBody public String errors() throws IOException { int i=1/0; return "成功"; }

    前台请求,会显示如下错误页面 这种页面是不能直接展示给用户的 静态异常页面的定义

    固定错误类型

    定义未知为resources/error/ 下面 这样一旦出现错误,就会自动跳转到这个页面

    不固定错误类型

    同样定义在 定义未知为resources/error/ 下面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>页面找不到了</h1> </body> </html>

    这样出现所有的400—499的错误都会定义到4xx页面,要注意的是:如果既有400.html,又有4xx.html出现400错误的时候回优先选择400.html

    动态异常页面

    动态的异常页面定义方式和静态的基本一致,可以采用的页面模板有jsp,freemarker,thymeleaf,html 动态页面也支持静态页面的表现方式,但是动态异常页面可以显示异常的原因

    thymeleaf

    这里使用thymeleaf 导入依赖

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>

    在templates下创建 内容如下

    <!DOCTYPE html> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table border="2"> <tr> <td>path:</td> <td th:text="${path}"></td> </tr> <tr> <td>error:</td> <td th:text="${error}"></td> </tr> <tr> <td>message:</td> <td th:text="${message}"></td> </tr> <tr> <td>timestamp:</td> <td th:text="${timestamp}"></td> </tr><tr> <td>status:</td> <td th:text="${status}"></td> </tr> </table> </body> </html>

    jsp

    使用jsp需要配置全局的异常捕捉 新建类

    package touxian_ssm.ssm.config; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author 偷闲 * @date 2019/5/23 15:25 */ @ControllerAdvice public class Error { public static final String IMOOC_ERROR_VIEW = "error/error"; @ExceptionHandler(value = Exception.class) public Object errorHandler(HttpServletRequest reqest, HttpServletResponse response, Exception e) throws Exception { e.printStackTrace(); ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.addObject("url", reqest.getRequestURL()); mav.setViewName(IMOOC_ERROR_VIEW); return mav; } }

    创建error.jsp jsp代码如下

    <head> <title>Title</title> </head> <body> <h1 style="color: red">发生错误:</h1> <div>${url}</div> <div>${exception.message}</div> </body> </html>

    异常页面的顺序是 发生错误->查找动态改错误页面—>查找静态改错误页面->查找动态xx错误页面->查找静态xx错误页面

    最新回复(0)