Java接口异常统一返回格式的核心是通过全局异常处理器将未捕获异常转为标准JSON(code/msg/data),区分业务与系统异常,隐藏堆栈,结合自定义异常类、统一响应体及合理HTTP状态码映射,确保异常可追溯、可控、语义清晰。

Java接口异常统一返回格式的核心是:用全局异常处理器拦截所有未捕获异常,转换为标准JSON结构(如code、msg、data),避免堆栈信息暴露给前端,同时区分业务异常与系统异常。
定义统一响应体
创建通用返回类,覆盖成功和失败场景:
- code:整型状态码(如200成功,400参数错误,500服务异常)
- msg:用户友好的提示语(非开发堆栈)
- data:可选,成功时返回业务数据,异常时通常为null或空对象
- 建议额外加timestamp和requestId便于排查
自定义业务异常类
继承RuntimeException,携带可读code和msg,不打断事务且易于识别:
- 例如:
BusinessException(1001, "用户名已存在") - 避免直接抛
IllegalArgumentException等原生异常,前端无法精准识别类型 - 可在Service层主动抛出,Controller不捕获,交由全局处理器统一处理
配置全局异常处理器
使用@ControllerAdvice + @ExceptionHandler拦截异常:
立即学习“Java免费学习笔记(深入)”;
- 专门处理
BusinessException:取其code/msg构造返回体 - 兜底处理
Exception:记录日志+返回500通用错误,绝不暴露e.getMessage() - 可单独处理
MethodArgumentNotValidException,提取校验注解的错误信息(如@NotBlank)
HTTP状态码合理映射
响应体code是业务码,HTTP状态码反映请求本质:
- 业务异常(如参数错、权限不足)→ HTTP 400 或 403,body里code=4001/4003
- 系统异常(空指针、数据库连不上)→ HTTP 500,body里code=5000
- 避免所有异常都返回200+错误code,违背REST语义
基本上就这些。关键不是堆砌工具,而是让每个异常都有明确归属、可控输出、可追溯线索。










