在 spring boot 中,应保持正常响应(apiresponse)与错误响应(errorresponse)分离,通过 http 状态码区分语义;前端依据 status 判断解析逻辑,而非强行合并两类 dto,从而兼顾 rest 规范性、可维护性与前后端协作效率。
在构建健壮的 RESTful API 时,一个常见误区是试图将成功响应(如 ApiResponse)和错误响应(如 ErrorResponse)强行统一为同一个 Java 类型——例如让 @RestControllerAdvice 的 @ExceptionHandler 方法也返回 ResponseEntity>。这种做法看似“统一”,实则违背了 HTTP 协议的设计哲学,也给客户端带来歧义与解析负担。
✅ 正确实践是:语义分离,协议驱动
- ✅ 成功路径:Controller 返回 ResponseEntity>,HTTP 状态码为 200/201 等标准成功码;
- ✅ 异常路径:@RestControllerAdvice 返回 ResponseEntity,HTTP 状态码严格对应错误类型(如 400、404、500);
- ✅ 前端依据 response.status 决定后续逻辑,而非依赖响应体结构判断成败。
这不仅符合 RFC 7231 对 HTTP 语义的定义,也使 OpenAPI 文档更准确、日志监控更清晰、客户端错误处理更可靠。
示例:前后端协同实现
假设你的后端已正确定义: