• [SpringMVC笔记] SpringMVC-15-SSM整合-项目异常处理


    SpringMVC-15-SSM整合-项目异常处理

    1、异常分类

    通常分为三类:系统异常(SystemException),业务异常(BusinessException)和其他异常(Exception)

    • 业务异常指由于用户的不规范操作产生的异常,如不合法的参数传入
    • 系统异常指项目运行过程中可预计但无法避免的异常,如数据库宕机
    • 其他异常指开发者未曾预料到的异常

    2、自定义项目业务异常

    public class BusinessException extends RuntimeException {
        private Integer code;
    
        public BusinessException(Integer code, String message) {
            super(message);
            this.code = code;
        }
        
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3、自定义项目系统异常

    public class SystemException extends RuntimeException {
        private Integer code;
    
        public SystemException(Integer code, String message, Throwable cause) {
            super(message, cause);
            this.code = code;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4、其他异常

    其他异常是未预料到会发生的异常,除了上面的两种异常外的所有异常都可以当作其他异常,由于所有的异常都继承自 Exception 类,所以就把 Exception 作为其他异常

    5、异常代码

    提高代码可读性,便于开发,自行协商设置即可

    public class Code {
        public static final Integer SYSTEM_ERR = 50001;
        public static final Integer SYSTEM_TIMEOUT_ERR = 50002;
        public static final Integer SYSTEM_UNKNOWN_ERR = 59999;
        public static final Integer BUSINESS_ERR = 60001;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    6、异常处理器

    由于系统异常和其他异常需要工作人员对系统进行调整,所以出现这两种异常时通常要记录进日志,并将相关信息发送给运维人员和开发人员,而业务异常则不需要

    @RestControllerAdvice
    public class ProjectExceptionAdvice {
        // 拦截处理业务异常
        @ExceptionHandler(BusinessException.class)
        public Result doBusinessException(BusinessException ex) {
            return new Result(ex.getCode(), null, ex.getMessage());
        }
        // 拦截处理系统异常
        @ExceptionHandler(SystemException.class)
        public Result doSystemException(SystemException ex) {
            // 记录日志,发送消息给运维人员,发送邮件给开发人员
            return new Result(ex.getCode(), null, ex.getMessage());
        }
        //拦截处理其他异常
        @ExceptionHandler(Exception.class)
        public Result doException(Exception ex) {
            // 记录日志,发送消息给运维人员,发送邮件给开发人员
            return new Result(Code.SYSTEM_UNKNOWN_ERR, null, "系统繁忙,请联系管理员。");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    7、异常发生

    以业务层为例,查找 id 小于等于 0 时认为参数非法,可以抛出业务异常。对于系统异常,使用 try catch 语句包裹可能会出现异常的语句,捕获异常并包装成自定义的异常,再将其抛出

    @Service
    public class BookServiceImpl implements BookService {
        @Autowired
        private BookDao bookDao;
    
        @Override
        public Book getById(Integer id) {
            // id 小于等于零时抛出业务异常
            if (id <= 0) {
                throw new BusinessException(Code.BUSINESS_ERR, "参数不合法,请检查传入参数!");
            }
            // 将可能出现的异常进行包装,装换成自定义异常
            try {
                int x = 1 / 0;  // 加入此行出现异常
                return bookDao.getById(id); // 模拟数据库访问出错
            } catch (Exception e) {
                throw new SystemException(Code.SYSTEM_TIMEOUT_ERR, "数据库访问异常,请稍后重试!", e);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    最后可以用 Postman 发送对应的请求进行测试

  • 相关阅读:
    教你用canvas打造一个炫酷的碎片切图效果
    如何使用程序【爬取视频】,完成中秋节大制作
    有哪些靠谱的程序员兼职平台?
    Nwafu-OJ-1500 Problem 3 2019阶段1考试 题目4
    (树) 最近公共祖先(LCA)
    JAVA毕业设计vue学习视频课程网站计算机源码+lw文档+系统+调试部署+数据库
    【AIGC调研系列】copilot在自动化测试脚本中的实际应用效果
    【NR技术】 3GPP支持无人机服务的关键性能指标
    0202hdfs的shell操作-hadoop-大数据学习
    十六、MySql的MVCC机制&CONNECT(收官!)
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/126468905