当前位置:   article > 正文

自定义错误页面在Spring Boot中的实现

自定义错误页面在Spring Boot中的实现

引言

在SpringBoot中,常用的异常处理有两种:一种是 BasicErrorController,另一种是 @ControllerAdviceBasicErrorController 用于处理非Controller抛出的异常,而@ControllerAdvice 用于处理Controller抛出的异常,对于非Controller抛出的异常它是不会管的。但是,如果是Controller层调用Service层,从Service层抛出,依然会抛到Controller,所以还是会调用@ControllerAdvice进行处理。

ControllerAdvice:异常处理异常处理

SpringBoot 默认的处理异常的机制是通过 BasicErrorController 类来实现的。当程序中出现异常时,SpringBoot 会向 /error 的 URL 发送请求。BasicErrorController 负责处理这个请求,并根据异常类型跳转到相应的页面来展示异常信息。

在 SpringBoot 中,可以通过配置自定义的错误页面来覆盖默认的错误页面。

1. 创建错误页面

首先,我们需要创建自定义的错误页面。在src/main/resources/templates/error目录下,创建HTML文件,例如对于error错误,创建error.html

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>自定义错误页面</title>
  6. <style>
  7. body {
  8. font-family: Arial, sans-serif;
  9. background-color: #f0f0f0;
  10. text-align: center;
  11. padding: 50px;
  12. }
  13. h1 {
  14. font-size: 48px;
  15. color: #333;
  16. }
  17. p {
  18. font-size: 24px;
  19. color: #666;
  20. }
  21. a {
  22. display: inline-block;
  23. padding: 10px 20px;
  24. background-color: #007bff;
  25. color: #fff;
  26. text-decoration: none;
  27. border-radius: 5px;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <h1>发生错误!</h1>
  33. <p>请稍后重试或联系管理员。</p>
  34. <span th:text="${msg}"></span>
  35. </body>
  36. </html>

页面使用到了 thymeleaf

导包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

2. 创建全局异常处理类

GlobalException:(普通的处理请求)

  1. @Component
  2. public class GlobalException implements HandlerExceptionResolver {
  3. @Override
  4. public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
  5. ModelAndView modelAndView = new ModelAndView();
  6. // if (e instanceof NullPointerException){
  7. // modelAndView.setViewName("error");
  8. // }
  9. modelAndView.setViewName("error");
  10. modelAndView.addObject("msg",e.toString());
  11. return modelAndView;
  12. }
  13. }

AjaxGlobalException:(ajax的请求方式,返回的使json数据)

  1. public class AjaxGlobalException {
  2. @ResponseBody
  3. @ExceptionHandler
  4. public Map errorHandler(Exception e) {
  5. Map<String, Object> m = new HashMap<>();
  6. m.put("status", 500);
  7. m.put("msg", e.toString());
  8. return m;
  9. }
  10. }

2. 创建Controller

  1. @RestController
  2. public class ErrorController {
  3. @GetMapping("/showList")
  4. public String showList() {
  5. int i = 1/0;
  6. return "showList";
  7. }
  8. @GetMapping("/showAll")
  9. public String showAll() {
  10. return "showAll";
  11. }
  12. }

测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45548
推荐阅读
相关标签
  

闽ICP备14008679号