java中实现全局异常捕获的核心是@controlleradvice配合@exceptionhandler、自定义businessexception及统一responseresult;通过success/fail方法封装响应,按异常类型分别处理并返回标准格式。

Java 中实现统一的全局异常捕获,核心是结合 Spring Boot 的 @ControllerAdvice 和 @ExceptionHandler,配合自定义异常类与统一响应结构,避免在每个 Controller 里重复写 try-catch。
定义统一响应体(ResponseResult)
先封装一个标准返回格式,包含状态码、消息、数据等字段,便于前后端约定:
public class ResponseResult<t> {
private int code;
private String message;
private T data;
public static <t> ResponseResult<t> success(T data) {
ResponseResult<t> r = new ResponseResult();
r.code = 200;
r.message = "success";
r.data = data;
return r;
}
public static <t> ResponseResult<t> fail(int code, String message) {
ResponseResult<t> r = new ResponseResult();
r.code = code;
r.message = message;
return r;
}
// getter/setter 省略
}
</t></t></t></t></t></t></t>
自定义业务异常(如 BusinessException)
让业务逻辑能主动抛出可识别的异常,方便统一拦截处理:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
public class BusinessException extends RuntimeException {
private int code;
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
public int getCode() { return code; }
}
使用时:throw new BusinessException(400, "用户名已存在");
编写全局异常处理器(@ControllerAdvice)
这个类会自动拦截所有 Controller 抛出的异常,按类型分别处理:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
@ResponseBody
public ResponseResult<void> handleBusinessException(BusinessException e) {
return ResponseResult.fail(e.getCode(), e.getMessage());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseResult<void> handleValidationException(MethodArgumentNotValidException e) {
String msg = e.getBindingResult().getFieldErrors().get(0).getDefaultMessage();
return ResponseResult.fail(400, "参数校验失败: " + msg);
}
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseResult<void> handleUnexpectedException(Exception e) {
// 生产环境建议记录日志,不暴露堆栈给前端
e.printStackTrace();
return ResponseResult.fail(500, "系统繁忙,请稍后再试");
}
}
</void></void></void>
补充说明与建议
- 确保该
@ControllerAdvice类在 Spring Boot 扫描路径下(或显式用@ComponentScan) - 若项目用了 WebMvcConfigurer 自定义配置,需确认未覆盖默认异常解析机制
- 对 404、405 等 HTTP 状态码异常,可额外配置
ErrorController或使用@ResponseStatus注解在异常类上 - 日志记录建议在
handleUnexpectedException中集成 SLF4J + MDC,带上请求 ID 方便排查
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










