# 全局异常处理 **Repository Path**: tzmoxi/global-exception-handling ## Basic Information - **Project Name**: 全局异常处理 - **Description**: 对于异常,我们统一进行处理,遇到错误信息,将被统一处理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-09-28 - **Last Updated**: 2023-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, 全局异常处理, 统一返回结果 ## README # 1.全局异常处理介绍 ## 1.1 简介 全局异常处理器即把错误异常统一处理的方法,可以在多个地方使用,而不需要为每个地方编写单独的处理逻辑。它可以帮助开发人员更好地管理异常,并提供一致的错误处理方式。 ## 1.2 优点 > 1.全局异常处理可以提高代码的重用性和可维护性 > > 2.避免重复编写异常处理代码,减少出错的可能性,提高程序的稳定性。 > > 3.配置简单,将代码复制到项目中就可以使用 # 2.全局异常处理的实现方式 自己定义一个类,在类上添加**@ControllerAdvice** 注解,在方法上添加**@ExceptionHandler**注解,就完成了一个全局异常处理的搭建,在一个类中可以写多个ExceptionHandler,对于不同类型的ExceptionHandler可以拦截不同类型的exception,然后再最后面设置一个拦截Exception.class的拦截器,用于拦截掉所有的方法,如果全局拦截中有我们不想拦截的异常类,只需要捕获以后再从新抛出即可示。 > - `@ControllerAdvice`设定拦截规则 > - `@ExceptionHandler`设定拦截的异常类型 # 3.全局异常处理代码实现 ## 3.1 定义一个统一返回类 ```java @Getter @Setter @AllArgsConstructor public class Results { // 返回状态标识 private Integer code; // 返回数据 private Object data; // 返回成功或失败的消息 private String msg; // 成功返回:数据 public static Results success(Object data) { return success(200, data, ""); } // 成功返回:数据、消息 public static Results success(Object data, String msg) { return success(200, data, msg); } // 成功返回:自定义状态码、数据、消息 public static Results success(Integer code, Object data, String msg) { return new Results(code, data, msg); } // 失败只返回:消息 public static Results fail(String msg) { return fail(-1, null, msg); } // 失败返回:数据、消息 public static Results fail(Object data, String msg) { return fail(-1, data, msg); } // 失败返回:自定义状态码、数据、消息 public static Results fail(Integer code, Object data, String msg) { return new Results(code, data, msg); } } ``` ## 3.2 定义全局异常处理 ```java @ControllerAdvice(annotations = {RestController.class, Controller.class}) @ResponseBody @Slf4j public class GlobalExceptionHandler { @ExceptionHandler(value = ArithmeticException.class) public Results exceptionHandler(ArithmeticException exception){ String ExMsg = exception.getMessage(); log.error(ExMsg); if (ExMsg.contains("zero")){ return Results.fail(ExMsg); } return Results.fail("未知异常!"); } @ExceptionHandler(Exception.class) public Results exceptionHandler1(Exception exception){ return Results.fail("处理所有异常!发生的错误是:"+exception.getMessage()); } } ``` ## 3.3 制造异常 ```java @Controller public class BasicController { // http://127.0.0.1:8080/hello?name=lisi @RequestMapping("/hello") @ResponseBody public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) { int m = 10; m = m/0; return "Hello " + name; } } ``` 访问网址:http://127.0.0.1:8080/hello?name=lisi 页面结果显示: ![image-20230928152206691](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309281522261.png) # 4.源代码码云地址 [全局异常处理仓库地址](https://gitee.com/tzmoxi/interceptors-and-filters.git) [更多内容请查看码云仓库](https://gitee.com/tzmoxi) ![image-20230928102756448](https://imags-1259764475.cos.ap-nanjing.myqcloud.com/img/202309281526712.png) # 5.CSDN详细笔记地址 [全局异常处理CSDN笔记](https://blog.csdn.net/qq_52699757/article/details/133384827)