SpringBoot 统一异常处理

心已赠人 2021-09-19 06:06 651阅读 0赞

JDK异常

所有的异常类是从 java.lang.Exception 类继承的子类。

  • 异常类有两个主要的子类:IOException 类和 RuntimeException 类。
  • 自定义异常,一般继承RuntimeException

在这里插入图片描述

代码结构

在这里插入图片描述

配置pom文件

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

启动类

  1. package com.zz;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class App {
  6. public static void main(String[] args) {
  7. SpringApplication.run(App.class,args);
  8. }
  9. }

自定义异常类

  1. package com.zz.exception;
  2. public class UserNotExistException extends RuntimeException{
  3. private static final long serialVersionUID = -1574716826948451793L;
  4. private String id;
  5. public UserNotExistException(String id){
  6. super("user not exist");
  7. this.id = id;
  8. }
  9. public String getId() {
  10. return id;
  11. }
  12. public void setId(String id) {
  13. this.id = id;
  14. }
  15. }

统一处理类

1. 在class上面加 @ControllerAdvice 表示全局异常处理类

2. 在方法的上面加@ExceptionHandler(UserNotExistException.class), 表示catch 到这个异常类型,并且在方法中处理, 不同的异常,可以通过不同的方法处理,每个方法上面都是通过这个注解括号里面的异常类来设置需要处理的异常类型。

  1. package com.zz.handler;
  2. import com.zz.exception.UserNotExistException;
  3. import org.springframework.http.HttpStatus;
  4. import org.springframework.web.bind.annotation.ControllerAdvice;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.bind.annotation.ResponseStatus;
  8. import java.util.HashMap;
  9. import java.util.Map;
  10. @ControllerAdvice
  11. public class ControllerExceptionHandler {
  12. //返回json的错误信息
  13. @ExceptionHandler(UserNotExistException.class)
  14. @ResponseBody
  15. @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
  16. public Map<String, Object> handleUserNotExistsException(UserNotExistException e) {
  17. Map<String, Object> map = new HashMap<>();
  18. map.put("id", e.getId());
  19. map.put("message", e.getMessage());
  20. return map;
  21. }
  22. //错误以后,跳转到自己定义的错误页面
  23. @ExceptionHandler(ArithmeticException.class)
  24. public String handle1(ArithmeticException e) {
  25. System.out.println("handle1 500*到了**************");
  26. return "/500.html";
  27. }
  28. }

controller类

  1. package com.zz.controller;
  2. import com.zz.exception.UserNotExistException;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.PathVariable;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. @RequestMapping("user")
  9. public class UserController {
  10. @GetMapping("/{id:\\d+}")
  11. public void get(@PathVariable String id) {
  12. throw new UserNotExistException(id);
  13. }
  14. @GetMapping("error2")
  15. public void get2() {
  16. int a=1/0;
  17. }
  18. }

#运行结果

在这里插入图片描述

在这里插入图片描述

代码地址 github: 添加链接描述

发表评论

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

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

相关阅读