微服务中需统一前后端异常协议,定义标准json错误结构(含code、message、details等字段),各服务通过全局异常处理器转换异常,网关兜底收敛,前端用拦截器统一处理。

在微服务架构中,统一前后端交互的异常协议,核心是让所有服务返回结构一致、语义清晰的错误响应,前端能按约定解析,避免因各服务异常格式不一致导致的兼容问题和重复处理逻辑。
定义标准化错误响应体
前后端共同约定一个 JSON 错误结构,例如:
{
"code": "USER_NOT_FOUND",
"message": "用户不存在",
"details": {"userId": "12345"},
"timestamp": "2024-06-15T10:22:33.123Z"
}
其中:
• code 是业务语义明确的字符串码(非 HTTP 状态码),如 ORDER_TIMEOUT、INSUFFICIENT_STOCK,便于前端做精准分支处理;
• message 是面向用户的简明提示,由后端国际化或按 locale 动态生成;
• details 可选,携带上下文数据(如失败字段、建议重试时间),供前端增强交互或上报日志;
• 避免直接暴露堆栈、内部类名、数据库错误等敏感信息。
在各服务中统一拦截并转换异常
每个微服务应配置全局异常处理器(如 Spring Boot 的 @ControllerAdvice),将各类异常映射为标准错误响应:
- 捕获自定义业务异常(如
UserNotFoundException),转为code="USER_NOT_FOUND"响应; - 对受检异常(如远程调用超时)、系统异常(如
NullPointerException),统一降级为通用错误码(如SYSTEM_ERROR),并记录完整日志供排查; - HTTP 状态码仍需合理使用:4xx 表示客户端问题(如 400 Bad Request 对应参数校验失败),5xx 表示服务端问题(如 503 Service Unavailable),但不依赖它传递业务含义——业务语义全由 response body 中的 code 承载。
通过网关层做兜底与收敛
API 网关(如 Spring Cloud Gateway、Kong)是统一异常出口的关键节点:
- 若下游服务未按规范返回错误(如返回了原始 HTML 错误页或空响应),网关应拦截并重写为标准错误格式;
- 可集中处理跨服务共性错误,如鉴权失败统一返回
code="UNAUTHORIZED",屏蔽各服务内部实现差异; - 添加请求 ID(
X-Request-ID)到响应头,方便前后端联查问题,同时在错误体中透传,提升可观测性。
前端配合:封装统一错误处理模块
前端不应手动解析每个接口的 error response,而应建立拦截器(如 Axios interceptor)自动处理:
- 根据
response.data.code触发对应提示策略:如"TOKEN_EXPIRED"自动跳登录页;"RATE_LIMIT_EXCEEDED"显示倒计时重试; - 对未知
code,记录上报监控平台,并展示默认友好提示(如“操作失败,请稍后重试”); - 结合
details字段动态渲染表单错误(如后端返回{"field": "email", "reason": "invalid_format"}),避免前端硬编码校验逻辑。










