SpringBoot项目中自定义异常处理 梦里梦外; 2023-02-14 10:43 1阅读 0赞 ### 目录 ### * 一、自定义异常界面 * 二、自定义异常处理类 * 三、异常测试 # 一、自定义异常界面 # 在templates目录下定义一些异常界面,如404.html、500.html、error.html. 1、自定义简化的404.html(可自行设置精美的界面) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>404</title> </head> <body> <h1>404</h1> </body> </html> 2、简化的500.html(可自行设置精美的界面) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>500</title> </head> <body> <h1>500</h1> </body> </html> 3、简化的error.html(可自行设置精美的界面) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>error</title> </head> <body> <h1>error</h1> </body> </html> 4、项目目录展示 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODgzMTY3_size_16_color_FFFFFF_t_0] # 二、自定义异常处理类 # 1、自定义一个异常捕捉类,此处示例是在com.example.test\_example目录下创建handler/ControllerExceptionHandler类 ControllerExceptionHandler.java /** * @author Cll * @date 2020/6/2 */ @ControllerAdvice public class ControllerExceptionHandler { private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * @Author Cll * @Description 将错误信息写入日志并返回错误页面 * @Param request 请求信息 * @Param e 异常信息 * @return error.html */ @ExceptionHandler(Exception.class) public ModelAndView exceptionHandler(HttpServletRequest request, Exception e) throws Exception { //将错误写入日志 logger.error("Url: {}, Exception: {}", request.getRequestURL(), e); if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) { throw e; } //返回错误页面 ModelAndView mv = new ModelAndView(); mv.addObject("url", request.getRequestURL()); mv.addObject("exception", e); mv.setViewName("error/error"); return mv; } } > (1)@ExceptionHandler(Exception.class) 中的@ExceptionHandler作用于方法,用来指明异常的类别,括号中表示异常的类别。上面的写法表示exceptionHandler方法可以处理所有的异常。 > (2)@ControllerAdvice注解是Controller的加强版,可对Controller中被@RequestMapping标注的方法进行一些逻辑处理,此注解一般用于异常处理。 > (3)AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class)的方法的基本功能:在e中查找ResponseStatus的标志,若不存在直接返回 null, 否则返回该标志信息。 2、为了能在error.html文件中查看到错误信息,需要添加几行代码 (1)在标签中添加 xmlns:th="http://www.w3.org/1999/xhtml" (2)显示错误信息 <h2 th:utext="'Url:' + ${url} "></h2> <h2 th:utext="'Exception:' + ${exception}"></h2> <ul> <li th:each="st : ${exception.stackTrace}"> <span th:utext="${st}"></span> </li> </ul> # 三、异常测试 # 1、在templates目录下定义index.html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>首页</h1> </body> </html> 2、在controller目录下定义IndexController.java文件 @Controller public class IndexController { @GetMapping("/index") public String index() { int i = 9/0; return "index"; } } > 其中 int i = 9/0;语句理论上因除数不能为零会报错 3、运行结果如下: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODgzMTY3_size_16_color_FFFFFF_t_0 1] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODgzMTY3_size_16_color_FFFFFF_t_0]: https://img-blog.csdnimg.cn/20200602155915868.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODgzMTY3,size_16,color_FFFFFF,t_0 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODgzMTY3_size_16_color_FFFFFF_t_0 1]: https://img-blog.csdnimg.cn/2020060220425283.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODgzMTY3,size_16,color_FFFFFF,t_0
还没有评论,来说两句吧...