SpringBoot统一处理异常

雨点打透心脏的1/2处 2022-05-26 09:35 385阅读 0赞

在springboot项目,报错有着默认的提示,这篇文章介绍一下如何统一处理异常。

新建项目,pom文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.dalaoyang</groupId>
  6. <artifactId>springboot_error</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <name>springboot_error</name>
  10. <description>springboot_error</description>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>1.5.9.RELEASE</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. </properties>
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-devtools</artifactId>
  30. <scope>runtime</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>
  37. </dependencies>
  38. <build>
  39. <plugins>
  40. <plugin>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-maven-plugin</artifactId>
  43. </plugin>
  44. </plugins>
  45. </build>
  46. </project>

创建一个IndexController,里面写两个方法,index方法正常跳转,test方法是故意写的一个nullpoint的错误的方法。 代码如下:

  1. package com.dalaoyang.Controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. import java.util.Map;
  5. /**
  6. * @author dalaoyang
  7. * @Description
  8. * @project springboot_learn
  9. * @package com.dalaoyang.Controller
  10. * @email yangyang@dalaoyang.cn
  11. * @date 2018/4/28
  12. */
  13. @RestController
  14. public class IndexController {
  15. @RequestMapping("/")
  16. public String index(){
  17. return "index";
  18. }
  19. @RequestMapping("/test")
  20. public String test(){
  21. Map map = null;
  22. return map.toString();
  23. }
  24. }

启动项目访问http://localhost:8080/,如下图,没有任何问题

1

然后随便访问一个项目里没有的地址,比如http://localhost:8080/aaa,如下图所示,404没有找到:

2

访问http://localhost:8080/test,如下图500错误:

3

从图上可以看到,springboot报错的时候都在找/error这个地址,这时我们新建一个CommonErrorController来统一处理异常,这个类实现了ErrorController,代码如下:

  1. package com.dalaoyang.Controller;
  2. import org.springframework.boot.autoconfigure.web.ErrorController;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. /**
  7. * @author dalaoyang
  8. * @Description
  9. * @project springboot_learn
  10. * @package com.dalaoyang.Controller
  11. * @email yangyang@dalaoyang.cn
  12. * @date 2018/4/28
  13. */
  14. @RestController
  15. public class CommonErrorController implements ErrorController {
  16. private final String ERROR_PATH = "/error";
  17. @Override
  18. public String getErrorPath() {
  19. return ERROR_PATH;
  20. }
  21. @RequestMapping(value = ERROR_PATH)
  22. public String handleError(){
  23. System.out.println(getErrorPath());
  24. return "error";
  25. }
  26. }

重启项目,在访问http://localhost:8080/aaa和http://localhost:8080/test就都返回"error"字符串了,如下:

4

源码下载 :大老杨码云

个人网站:https://dalaoyang.cn

发表评论

表情:
评论列表 (有 0 条评论,385人围观)

还没有评论,来说两句吧...

相关阅读