spring boot 全局异常处理通过@controlleradvice+@exceptionhandler实现,封装result统一响应,支持运行时、空指针、业务异常(bizexception)及参数校验异常拦截,并建议记录完整堆栈日志。

在 Spring Boot 项目中,全局统一异常处理主要通过 @ControllerAdvice + @ExceptionHandler 实现,拦截所有控制器抛出的异常,并封装成统一响应格式返回给前端。
定义统一响应结构
先设计一个通用的返回体,比如:
public class Result<t> {
private int code;
private String msg;
private T data;
// 构造方法、getter/setter 省略
}
</t>
常见状态码可定义为常量类,如 ResultCode.SUCCESS(200, "成功")、ResultCode.SERVER_ERROR(500, "服务器内部错误") 等。
使用 @ControllerAdvice 拦截异常
创建一个配置类,用 @ControllerAdvice 标记,它会作用于所有 @Controller 和 @RestController 类:
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
// 拦截运行时异常
@ExceptionHandler(RuntimeException.class)
public Result<string> handleRuntimeException(RuntimeException e) {
return Result.fail(500, "系统运行异常:" + e.getMessage());
}
// 拦截空指针异常(可选,更细粒度)
@ExceptionHandler(NullPointerException.class)
public Result<string> handleNPE(NullPointerException e) {
return Result.fail(500, "数据为空,请检查参数");
}
// 拦截自定义业务异常(推荐)
@ExceptionHandler(BizException.class)
public Result<string> handleBizException(BizException e) {
return Result.fail(e.getCode(), e.getMsg());
}
// 拦截参数校验异常(@Valid)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<string> handleValidationException(MethodArgumentNotValidException e) {
String msg = e.getBindingResult().getFieldErrors().get(0).getDefaultMessage();
return Result.fail(400, "参数错误:" + msg);
}
}
</string></string></string></string>
配合自定义异常提升可维护性
建议定义一个业务异常基类,方便统一识别和处理:
public class BizException extends RuntimeException {
private int code;
private String msg;
public BizException(int code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
// getter 方法...
}
在 Service 中主动抛出:
if (user == null) {
throw new BizException(404, "用户不存在");
}
这样能避免把所有逻辑塞进 try-catch,也便于前端根据 code 区分错误类型。
补充:全局异常日志记录
在 @ExceptionHandler 方法里加一行日志,便于排查问题:
log.error("全局异常捕获", e); // e 是 Throwable 参数
注意不要只打印 e.getMessage(),会丢失堆栈信息。
不复杂但容易忽略的是:确保异常确实被抛到了 Controller 层(比如 Service 内吞了异常就没法拦截),且 @ControllerAdvice 类在 Spring 扫描路径下。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











