1.异常出现的常见位置和原因

(1)框架内部抛出的异常

        因使用不合规导致,如配置文件内容写错等。

(2)数据层抛出的异常

        1)写错sql语句、数据库服务器超时等;
        2)因外部服务器故障导致(例如:服务器访问超时)。

(3)业务层抛出的异常

        因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等)。

(4)表现层抛出的异常

        因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)。

(5)工具类抛出的异常

        因工具类书写不严谨、不够健壮导致(例如:必要释放的连接长期未释放等)。
【tips】dao、service、web层都会出现异常,那么异常处理代码应该写在哪一层呢?———所有异常均抛到web层进行处理。

2.异常处理器

        基于AOP思想,集中统一地处理项目中的异常。
        

(1)@RestControllerAdvice

        为REST风格开发的异常处理器做增强,其自带@ResponseBody和@Component注解的功能

(2)@ExceptionHandler

        专用于处理异常的方法的上方,拦截指定的异常,即出现异常后终止原始controller的执行,转到当前方法执行。

3.项目异常处理方案

(1) 项目异常分类

        1)业务异常(BusinessException)
                用户的错误操作产生的异常,如输入的内容与要求的数据类型不符;
                将提醒消息传递给用户,提醒其规范操作。
        2)系统异常(SystemException)
                项目运行过程中可预见但无法避免的异常,如数据库宕机等;
                发送固定消息,安抚用户,如“正在连接,请稍后再试...”。
        3)其他异常(Exception)
                项目运行过程中不可预见的异常,如FileNotFoundException;
发送固定消息,安抚用户,如“正在连接,请稍后再试...”。

(2)异常的处理

        1)自定义业务异常和系统异常

                用来对异常进行分类,这样就能把不同的异常分为自定义业务异常BusinessException和自定义系统异常SystemException。
                

        2)包装异常

                将可能出现的异常进行包装转换成自定义异常
                

        3)处理异常

                在异常处理器中,对拦截(@ExceptionHandler)的不同异常分别进行不同处理。