• [SpringMVC笔记] SpringMVC-14-SSM整合-异常处理器


    SpringMVC-14-SSM整合-异常处理器

    1. 异常要按不同种类分别处理
    2. 数据层,业务层,表现层都有可能出现异常,将异常全部抛至表现层做处理
    3. 用 AOP 思想分类处理不同的异常

    SpringMVC 中提供了异常处理器,可以集中统一处理项目中的异常,如下例:

    // @ControllerAdvice
    // @ResponseBody
    // 注解上面的两个或者下面的一个
    @RestControllerAdvice
    public class ProjectExceptionAdvice {
        // 注解内指定要捕获的异常类,此处捕获了所有的异常
        @ExceptionHandler(Exception.class)
        public Result doException(Exception exception) {   // 要处理的异常作为参数传入
            System.out.println("出现异常!");
            exception.printStackTrace();
            return new Result(-1, null, "哎呀,出错了...");   // 出现异常也要返回数据给前端
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    对几个注解的补充说明:

    • @ControllerAdvice 表明这是一个表现层通知(这个类需要被 SpringMVC 的配置类扫描到)
    • @ResponseBody 表明其返回值会传给前端(将返回值转换为 json 数据)
    • @RestControllerAdvice 用于取代上面两个注解
    • @ExceptionHandler 表明所需要处理的异常类型,注解在方法上

    再补充:异常处理器会按照精确性优先的规则捕获异常,例如同时有捕获 Exception.class 和捕获 RuntimeException.class 的两个处理方法,此时项目出现了 RuntimeException 异常,那么此异常不会被当作 Exception 捕获,而是更精确的作为 RuntimeException 被捕获并处理

    此外,如果有两个处理方法捕获同一个异常类(@ExceptionHandler 注解中的内容相同),那么出现此种异常时会出错,异常无法被处理

  • 相关阅读:
    odoo17 web.assets_web.min.js 赏析
    C#学习系列之事件
    宝塔服务器配置提示No input file specified
    Java并发编程—synchronized
    洛谷 P2763 试题库问题(最大流 EK算法)
    vue+typeScript 中 webpack.ProvidePlugin的使用
    @Profile注解的作用是什么?
    Django之Session
    建模杂谈系列155 从一段程序讨论通用的任务执行方法
    ElasticSearch在windows环境启动
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/126453944