跳转至

错误码对照表

文档版本: 1.0.0 最后更新: 2026-05-25 适用版本: v2.7.34+ 作者: AI Assistant

JAiRouter 使用标准化的错误码系统来标识各种错误情况。所有错误响应都包含错误码字段,便于客户端进行错误处理。

错误响应格式

{
  "success": false,
  "message": "错误描述",
  "errorCode": "ERROR_CODE",
  "data": null
}

HTTP 状态码映射

HTTP 状态码说明错误类别
400请求参数错误验证错误
401未认证认证错误
403权限不足授权错误
404资源不存在资源错误
409资源冲突业务错误
429请求过多限流错误
500服务器内部错误系统错误
502网关错误下游服务错误
503服务不可用下游服务错误

认证错误码 (Authentication)

HTTP 状态码: 401 Unauthorized

错误码描述常见原因解决方案
INVALID_API_KEY无效的 API KeyAPI Key 格式错误或不存在检查 API Key 是否正确
EXPIRED_API_KEYAPI Key 已过期API Key 超过有效期重新生成 API Key
MISSING_API_KEY缺少 API Key请求头未包含 API Key添加 X-API-Key 请求头
INVALID_JWT_TOKEN无效的 JWT 令牌JWT 格式错误或签名无效检查 JWT 格式和签名
EXPIRED_JWT_TOKENJWT 令牌已过期JWT 超过有效期刷新或重新获取 JWT
BLACKLISTED_TOKEN令牌已被列入黑名单JWT 已被注销重新登录获取新令牌
AUTH_FAILED认证失败通用认证失败检查认证凭据
TOKEN_EXPIRED令牌过期JWT 令牌过期刷新令牌
AUTH_ERROR认证错误认证过程异常检查认证服务状态

示例响应:

{
  "success": false,
  "message": "无效的API Key",
  "errorCode": "INVALID_API_KEY",
  "data": null
}


授权错误码 (Authorization)

HTTP 状态码: 403 Forbidden

错误码描述常见原因解决方案
INSUFFICIENT_PERMISSIONS权限不足用户没有所需权限联系管理员分配权限
ACCESS_DENIED访问被拒绝尝试访问无权资源检查资源访问权限
RESOURCE_FORBIDDEN资源禁止访问资源设置为禁止访问联系资源所有者
FORBIDDEN禁止访问通用授权失败检查用户角色和权限

示例响应:

{
  "success": false,
  "message": "权限不足,需要权限: admin",
  "errorCode": "INSUFFICIENT_PERMISSIONS",
  "data": null
}


数据脱敏错误码 (Sanitization)

HTTP 状态码: 500 Internal Server Error

错误码描述常见原因解决方案
SANITIZATION_FAILED数据脱敏失败脱敏过程异常检查日志获取详情
INVALID_SANITIZATION_RULE无效的脱敏规则规则配置错误检查规则配置
RULE_COMPILATION_FAILED规则编译失败正则表达式语法错误修正正则表达式
CONTENT_PROCESSING_FAILED内容处理失败内容格式不支持检查内容类型

示例响应:

{
  "success": false,
  "message": "数据脱敏失败: 内容格式不支持",
  "errorCode": "SANITIZATION_FAILED",
  "data": null
}


资源错误码 (Resource)

HTTP 状态码: 404 Not Found

错误码描述常见原因解决方案
NOT_FOUND资源未找到请求的资源不存在检查资源 ID 或路径
SERVICE_NOT_FOUND服务未找到服务类型不存在检查服务类型名称
INSTANCE_NOT_FOUND实例未找到实例 ID 不存在检查实例 ID
CONFIG_NOT_FOUND配置未找到配置项不存在检查配置键

验证错误码 (Validation)

HTTP 状态码: 400 Bad Request

错误码描述常见原因解决方案
VALIDATION_ERROR请求数据无效参数格式或值错误检查请求参数
INVALID_PARAMETER参数无效参数值超出范围检查参数约束
MISSING_PARAMETER缺少参数必填参数未提供添加必填参数
INVALID_FORMAT格式无效数据格式错误检查数据格式

业务错误码 (Business)

错误码描述HTTP 状态码解决方案
CONFLICT资源冲突409检查资源状态
DUPLICATE_RESOURCE资源重复409使用不同标识
OPERATION_FAILED操作失败500检查日志获取详情
RATE_LIMIT_EXCEEDED限流触发429降低请求频率

下游服务错误码 (Downstream)

HTTP 状态码: 502/503

错误码模式描述解决方案
5xx下游服务错误检查下游服务状态
502网关错误检查网络连接
503服务不可用等待服务恢复
504网关超时增加超时时间或检查下游响应

限流错误码 (Rate Limit)

HTTP 状态码: 429 Too Many Requests

错误码描述响应头解决方案
RATE_LIMIT_EXCEEDED超过限流阈值X-RateLimit-Reset等待令牌恢复
GLOBAL_RATE_LIMIT全局限流触发Retry-After降低全局请求频率
SERVICE_RATE_LIMIT服务级限流触发X-RateLimit-Remaining降低服务请求频率
INSTANCE_RATE_LIMIT实例级限流触发X-RateLimit-Remaining切换实例或等待

熔断器错误码 (Circuit Breaker)

错误码描述状态解决方案
CIRCUIT_BREAKER_OPEN熔断器开启OPEN等待熔断器进入半开状态
CIRCUIT_BREAKER_HALF_OPEN熔断器半开HALF_OPEN少量请求尝试
SERVICE_DEGRADED服务降级-使用降级策略

系统错误码 (System)

HTTP 状态码: 500 Internal Server Error

错误码描述常见原因解决方案
INTERNAL_ERROR服务器内部错误未预期的异常检查服务日志
CONFIGURATION_ERROR配置错误配置文件格式错误检查配置文件
DATABASE_ERROR数据库错误数据库连接失败检查数据库状态
CACHE_ERROR缓存错误Redis 连接失败检查 Redis 状态

错误处理最佳实践

1. 客户端错误处理

// JavaScript 示例
async function handleApiResponse(response) {
  const data = await response.json();

  if (!data.success) {
    switch (data.errorCode) {
      case 'INVALID_API_KEY':
      case 'EXPIRED_API_KEY':
      case 'INVALID_JWT_TOKEN':
      case 'EXPIRED_JWT_TOKEN':
        // 跳转到登录页面
        window.location.href = '/login';
        break;
      case 'RATE_LIMIT_EXCEEDED':
        // 等待后重试
        const resetTime = response.headers.get('X-RateLimit-Reset');
        await sleep(resetTime * 1000);
        return retryRequest();
        break;
      default:
        // 显示错误消息
        showError(data.message);
    }
    return;
  }

  return data.data;
}

2. 服务端错误处理

// Java 示例
@RestControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(AuthenticationException.class)
    public ResponseEntity<ErrorResponse> handleAuthException(AuthenticationException ex) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
            .body(new ErrorResponse(ex.getMessage(), ex.getErrorCode()));
    }

    @ExceptionHandler(RateLimitExceededException.class)
    public ResponseEntity<ErrorResponse> handleRateLimit(RateLimitExceededException ex) {
        return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS)
            .header("X-RateLimit-Reset", ex.getResetTime())
            .body(new ErrorResponse("请求过多", "RATE_LIMIT_EXCEEDED"));
    }
}

3. 错误日志记录

// 记录错误日志
log.error("认证失败: errorCode={}, message={}", 
    ex.getErrorCode(), ex.getMessage());

错误码快速查询

按状态码分类

状态码错误码列表
400VALIDATION_ERROR, INVALID_PARAMETER, MISSING_PARAMETER, INVALID_FORMAT
401INVALID_API_KEY, EXPIRED_API_KEY, MISSING_API_KEY, INVALID_JWT_TOKEN, EXPIRED_JWT_TOKEN, BLACKLISTED_TOKEN
403INSUFFICIENT_PERMISSIONS, ACCESS_DENIED, RESOURCE_FORBIDDEN, FORBIDDEN
404NOT_FOUND, SERVICE_NOT_FOUND, INSTANCE_NOT_FOUND, CONFIG_NOT_FOUND
409CONFLICT, DUPLICATE_RESOURCE
429RATE_LIMIT_EXCEEDED, GLOBAL_RATE_LIMIT, SERVICE_RATE_LIMIT, INSTANCE_RATE_LIMIT
500INTERNAL_ERROR, SANITIZATION_FAILED, CONFIGURATION_ERROR, DATABASE_ERROR, CACHE_ERROR
502/503下游服务错误码

变更记录

版本日期变更内容
1.0.02026-05-25初始版本,包含所有错误码定义

最后更新: 2026-05-25