第九篇 异常统一处理

异常统一处理的优势

提高代码可维护性

通过集中管理异常处理逻辑,避免重复代码,减少因异常处理分散导致的维护困难。统一处理机制使修改和扩展异常处理策略更加便捷。

增强系统健壮性

统一捕获未处理的异常,防止程序意外终止。通过预设的降级策略(如默认返回值、日志记录、友好提示),确保系统在异常情况下仍能提供基本服务。

提升用户体验

自定义异常信息格式,返回用户友好的错误提示(如标准化JSON响应)。避免暴露敏感技术细节,同时提供可追溯的错误码或请求ID便于问题定位。

简化开发流程

开发者无需在每个方法中单独处理异常,只需关注业务逻辑。通过AOP或全局拦截器实现非侵入式处理,降低业务代码与异常处理的耦合度。

便于监控与分析

集中记录异常日志,结合监控工具实时发现系统问题。统一存储异常上下文信息(如参数、堆栈),加速故障排查和性能优化。

规范团队协作

制定统一的异常分类体系(如业务异常、系统异常),明确处理优先级。通过标准化接口文档描述可能的异常类型,提升团队协作效率。

实现的思路:将异常进行统一捕获管理,就不用在Controller层进行显示处理,

代码实现:

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 自定义方法,处理所有controller中出现的异常
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResultObj globalHanderlException(Exception exception) {//精准捕获异常,将信息返回给前端
        //处理异常逻辑】
        System.out.println("----------执行全局异常方法--------------");
        //打印异常堆栈信息
        exception.printStackTrace();

        return ResultObj.error();
    }
}

controller层

java 复制代码
@Controller
public class ExceptionController {
    /**
     * 查询数据
     */
    @RequestMapping("queryData")
    @ResponseBody
    public ResultObj queryData(@RequestParam String type){
        if(type.equals("宝马")){
            return ResultObj.ok("宝马");
        }else {
            return ResultObj.error();
        }
    }
    /**
     * 查询数据
     */
    @RequestMapping("queryAll")
    @ResponseBody
    public ResultObj queryAll(){
        //把可能出现异常代码方法try块
//        int i = 10 / 0; //算术异常
        //抛出空指针异常
        String str = null;
        str.isEmpty();
        return ResultObj.ok();
    }
}

测试

运行启动类,直接访问接口,产看打印后台信息

相关推荐
初次攀爬者11 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺11 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart12 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
Nyarlathotep011318 小时前
SpringBoot Starter的用法以及原理
java·spring boot
dkbnull2 天前
深入理解Spring两大特性:IoC和AOP
spring boot
洋洋技术笔记2 天前
Spring Boot条件注解详解
java·spring boot
洋洋技术笔记3 天前
Spring Boot配置管理最佳实践
spring boot
用户8307196840823 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
大道至简Edward4 天前
Spring Boot 2.7 + JDK 8 升级到 Spring Boot 3.x + JDK 17 完整指南
spring boot·后端
洋洋技术笔记4 天前
Spring Boot启动流程解析
spring boot·后端