必须将@restcontrolleradvice类置于@componentscan扫描路径内,否则异常处理器不生效;需按nullpointerexception、参数异常、businessexception、exception顺序定义@exceptionhandler方法,并返回统一result结构。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Spring Boot项目中用@ControllerAdvice编写全局异常处理器,必须让Spring容器能扫描到这个类,并确保它能拦截所有控制器抛出的异常,否则前端仍会看到原始堆栈信息。
创建全局异常处理类
在项目任意包路径下新建一个Java类,例如GlobalExceptionHandler.java,添加@RestControllerAdvice注解——它等价于@ControllerAdvice + @ResponseBody,直接返回JSON,无需每个方法再加@ResponseBody。
在类内部定义多个@ExceptionHandler方法,按异常类型从具体到宽泛排列:先处理NullPointerException、IllegalArgumentException等业务常见异常,再处理BusinessException等自定义异常,最后用Exception.class兜底。
【必须确保该类不在@ComponentScan扫描范围之外】,否则Spring启动时不会注册为Bean,整个异常处理逻辑完全失效。
定义统一响应结构
方法一:使用Lombok@Data + 手动构造静态工厂方法
新建Result
方法二:复用已有响应体(如Response
若项目已存在Swagger兼容的Response
通义灵码 Linux版是阿里云推出的一款AI智能编码助手,专为Linux开发者设计。它支持在Linux操作系统下的JetBrains IDEs、Visual Studio Code等主流集成开发环境中运行。该工具基于通义大模型,提供代码智能生成、实时续写、单元测试生成、代码优化以及研发智能问答等功能,旨在帮助Linux用户在编码过程中提升效率。
精准拦截不同异常类型
第一步:处理空指针异常
@ExceptionHandler(NullPointerException.class)修饰的方法,返回Result.error(500, "系统繁忙,请稍后再试"),避免暴露user.getName()这类具体调用链。
第二步:处理参数缺失异常
捕获MissingServletRequestParameterException,提取参数名e.getParameterName(),返回Result.error(400, e.getParameterName() + "是必填项")。
第三步:处理自定义业务异常
当抛出new BusinessException(1001, "库存不足")时,@ExceptionHandler(BusinessException.class)方法直接取code和message填充Result,保持前后端错误码体系一致。
第四步:兜底处理所有未覆盖异常
@ExceptionHandler(Exception.class)必须放在最后——如果提前声明,它会吃掉所有异常,导致上面三类具体处理逻辑永不执行。










