Java中响应体Result统一封装全局异常信息,核心是让所有异常统一转为结构一致的JSON响应;Result泛型类含code、message、data三字段,推荐增加timestamp和requestId;用枚举管理错误码,自定义BusinessException并配合@ControllerAdvice分层捕获处理,控制器专注业务逻辑。

Java中响应体Result统一封装全局异常信息,核心是让所有异常——无论参数校验失败、业务规则不满足,还是系统内部错误——最终都转成结构一致的JSON响应,前端只对接一种格式,后端也不用每个接口手动处理异常。
定义清晰的Result泛型类
Result必须包含三个基础字段:code(int类型错误码)、message(面向用户或调试人员的提示)、data(泛型T,成功时有值,异常时为null)。不建议加success布尔字段,它和code语义重复,还容易引发前端双重判断逻辑错乱。
可选但推荐增加:timestamp(毫秒时间戳)用于排查异步或重放问题;requestId(唯一请求ID)便于日志追踪与监控对齐。
示例关键代码:
立即学习“Java免费学习笔记(深入)”;
public class Result<T> {
private int code;
private String message;
private T data;
private long timestamp;
private String requestId;
public static <T> Result<T> success(T data) {
Result<T> r = new Result<>();
r.code = 200;
r.message = "success";
r.data = data;
r.timestamp = System.currentTimeMillis();
return r;
}
public static <T> Result<T> error(int code, String message) {
Result<T> r = new Result<>();
r.code = code;
r.message = message;
r.timestamp = System.currentTimeMillis();
return r;
}
// getter/setter 省略
}
用枚举统一管理错误码
避免硬编码数字和字符串,把错误码和提示封装进enum,自带描述、可序列化、IDE能补全、后期增删方便。
常见类型覆盖:成功(0)、参数错误(1001)、资源不存在(404)、权限不足(403)、系统繁忙(500)、业务冲突(如重复提交)等。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
示例:
public enum ErrorCode {
SUCCESS(0, "操作成功"),
PARAM_ERROR(1001, "请求参数格式错误"),
NOT_FOUND(404, "请求资源不存在"),
FORBIDDEN(403, "无访问权限"),
SYSTEM_ERROR(500, "系统繁忙,请稍后再试");
private final int code;
private final String message;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
// getter 省略
}
自定义业务异常并分层捕获
定义BusinessException继承RuntimeException,构造时传入ErrorCode,保证抛出即携带标准错误信息。
在@ControllerAdvice中,用@ExceptionHandler按异常类型分层处理:
- BindException / MethodArgumentNotValidException → 转为PARAM_ERROR
- BusinessException → 直接取其ErrorCode里的code和message
- Exception(兜底)→ 记录完整堆栈到日志,返回SYSTEM_ERROR,绝不暴露敏感细节
关键点:不要只捕获Exception一个大类,否则底层IOException、SQLException等可能被忽略;也不要手动new Result对象,统一调用Result.error(…),保持构造逻辑集中。
控制器里专注业务,异常交给框架
Controller方法无需try-catch,直接写业务逻辑。遇到校验失败就throw new BusinessException(ErrorCode.PARAM_ERROR);查不到数据就throw new BusinessException(ErrorCode.NOT_FOUND)。
Spring Boot自动将这些异常交由@ControllerAdvice处理,并返回Result格式的HTTP响应,HTTP状态码(如400、404、500)仍按语义设置,与Result.code职责分离——前者给网关/负载均衡看,后者给前端业务逻辑用。
这样,哪怕新增100个接口,只要抛出规范异常,响应结构就天然统一,文档好写,前端好接,线上问题也好定位。

















