图片.png一、什么是统一异常处理

1、制造异常

除以0

  1. int a = 10/0;

图片.png

2、什么是统一异常处理

我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理

二、统一异常处理

1、添加依赖

  1. service-base模板中引入common_utils依赖
  1. <dependency>
  2. <groupId>com.atguigu</groupId>
  3. <artifactId>common_utils</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

2、创建统一异常处理器

在service-base中创建统一异常处理类GlobalExceptionHandler.java:

  1. package com.atguigu.servicebase.exceptionhandler;
  2. /**
  3. * 统一异常处理类
  4. */
  5. @ControllerAdvice
  6. public class GlobalExceptionHandler {
  7. //指定出现什么异常执行这个方法
  8. @ExceptionHandler(Exception.class)
  9. @ResponseBody
  10. public R error(Exception e){
  11. e.printStackTrace();
  12. return R.error().message(e.getMessage());
  13. }
  14. }

2、测试

返回统一错误结果
图片.png

三、处理特定异常

1、添加异常处理方法

GlobalExceptionHandler.java中添加

  1. package com.atguigu.servicebase.exceptionhandler;
  2. /**
  3. * 统一异常处理类
  4. */
  5. @ControllerAdvice
  6. public class GlobalExceptionHandler {
  7. //特定异常
  8. @ExceptionHandler(ArithmeticException.class)
  9. @ResponseBody
  10. public R error(ArithmeticException e){
  11. e.printStackTrace();
  12. return R.error().message("执行了ArithmeticException异常处理..");
  13. }
  14. }

2、测试

图片.png

四、自定义异常

1、创建自定义异常类

  1. package com.atguigu.servicebase.exceptionhandler;
  2. @Data
  3. @AllArgsConstructor //生成有参数构造方法
  4. @NoArgsConstructor //生成无参数构造
  5. public class GuliException extends RuntimeException {
  6. private Integer code;//状态码
  7. private String msg;//异常信息
  8. }

2、业务中需要的位置抛出GuliException

  1. package com.atguigu.eduservice.controller;
  2. @Api(description="讲师管理")
  3. @RestController
  4. @RequestMapping("/eduservice/teacher")
  5. public class EduTeacherController {
  6. @Autowired
  7. private EduTeacherService teacherService;
  8. //3 分页查询讲师的方法
  9. @GetMapping("pageTeacher/{current}/{limit}")
  10. public R pageListTeacher(@PathVariable long current,
  11. @PathVariable long limit) {
  12. //创建page对象
  13. Page<EduTeacher> pageTeacher = new Page<>(current,limit);
  14. try {
  15. int i = 10/0;
  16. }catch(Exception e) {
  17. //执行自定义异常
  18. throw new GuliException(20001,"执行了自定义异常处理....");
  19. }
  20. //调用方法实现分页
  21. teacherService.page(pageTeacher,null);
  22. long total = pageTeacher.getTotal();//总记录数
  23. List<EduTeacher> records = pageTeacher.getRecords(); //数据list集合
  24. return R.ok().data("total",total).data("rows",records);
  25. }
  26. }

3、添加异常处理方法

  1. GlobalExceptionHandler.java中添加
  1. package com.atguigu.servicebase.exceptionhandler;
  2. /**
  3. * 统一异常处理类
  4. */
  5. @ControllerAdvice
  6. public class GlobalExceptionHandler {
  7. //自定义异常
  8. @ExceptionHandler(GuliException.class)
  9. @ResponseBody //为了返回数据
  10. public R error(GuliException e) {
  11. log.error(e.getMessage());
  12. e.printStackTrace();
  13. return R.error().code(e.getCode()).message(e.getMsg()); //注意:不是e.getMessage()
  14. }
  15. }

4、测试

图片.png