响应处理
ErrorCode
ErrorCode 枚举定义 58 个预定义错误码,覆盖通用、客户端与服务端全场景
ErrorCode 是筱工具(Java) 的错误码枚举类,位于 com.xlf.utility 包下。每个枚举值包含英文标识、5 位数字响应码与中文描述,用于标准化 API 响应状态。
package com.xlf.utility;
public enum ErrorCode {
NOT_EXIST("NotExist", 40000, "内容不存在"),
EXISTED("Existed", 40001, "内容已存在"),
PARAMETER_ERROR("ParameterError", 40002, "参数错误"),
// ... 58 个预定义错误码
private final String output; // 英文标识
private final Integer code; // 5 位数字响应码
private final String message; // 中文描述
}
ErrorCode 的 5 位数字响应码遵循以下规则:
┌─────────────┬───────────────┐
│ 前 3 位 │ 后 2 位 │
│ HTTP 状态码 │ 业务细分码 │
└─────────────┴───────────────┘
示例:40024 → HTTP 400 + 细分码 24
50001 → HTTP 500 + 细分码 01
HTTP 状态码可通过 code / 100 计算得出。例如 40024 / 100 = 400,50001 / 100 = 500。
| 枚举值 | output | code | 说明 |
|---|
NOT_EXIST | NotExist | 40000 | 内容不存在 |
EXISTED | Existed | 40001 | 内容已存在 |
| 枚举值 | output | code | 说明 |
|---|
BAD_REQUEST | BadRequest | 40024 | 错误请求 |
PARAMETER_ERROR | ParameterError | 40002 | 参数错误 |
PARAMETER_MISSING | ParameterMissing | 40003 | 参数缺失 |
PARAMETER_INVALID | ParameterInvalid | 40004 | 参数无效 |
PARAMETER_ILLEGAL | ParameterIllegal | 40005 | 参数非法 |
PARAMETER_TYPE_ERROR | ParameterTypeError | 40006 | 参数类型错误 |
BODY_ERROR | BodyError | 40007 | 请求体错误 |
BODY_MISSING | BodyMissing | 40008 | 请求体缺失 |
BODY_INVALID | BodyInvalid | 40009 | 请求体无效 |
BODY_ILLEGAL | BodyIllegal | 40010 | 请求体非法 |
BODY_TYPE_ERROR | BodyTypeError | 40011 | 请求体类型错误 |
HEADER_ERROR | HeaderError | 40012 | 请求头错误 |
HEADER_MISSING | HeaderMissing | 40013 | 请求头缺失 |
HEADER_INVALID | HeaderInvalid | 40014 | 请求头无效 |
HEADER_ILLEGAL | HeaderIllegal | 40015 | 请求头非法 |
HEADER_TYPE_ERROR | HeaderTypeError | 40016 | 请求头类型错误 |
OPERATION_ERROR | OperationError | 40017 | 操作错误 |
OPERATION_FAILED | OperationFailed | 40018 | 操作失败 |
OPERATION_INVALID | OperationInvalid | 40019 | 操作无效 |
OPERATION_ILLEGAL | OperationIllegal | 40020 | 操作非法 |
OPERATION_DENIED | OperationDenied | 40021 | 操作被拒绝 |
OPERATION_NOT_ALLOWED | OperationNotAllowed | 40022 | 操作不允许 |
OPERATION_NOT_SUPPORTED | OperationNotSupported | 40023 | 操作不支持 |
OPERATION_TYPE_ERROR | OperationTypeError | 40025 | 操作类型错误 |
EXPIRED | Expired | 40026 | 内容已过期 |
REQUEST_ERROR | RequestError | 40027 | 远程服务请求失败 |
| 枚举值 | output | code | 说明 |
|---|
UNAUTHORIZED | Unauthorized | 40101 | 未授权 |
LOGIN_FAILED | LoginFailed | 40102 | 登录失败 |
| 枚举值 | output | code | 说明 |
|---|
FORBIDDEN | Forbidden | 40301 | 禁止访问 |
PERMISSION_DENIED | PermissionDenied | 40302 | 权限拒绝 |
ACCESS_LIMITED | AccessLimited | 40303 | 访问受限 |
| 枚举值 | output | code | 说明 |
|---|
PAGE_NOT_FOUND | PageNotFound | 40401 | 页面未找到 |
NOT_FOUND | NotFound | 40402 | 未找到 |
RESOURCE_NOT_FOUND | ResourceNotFound | 40403 | 资源未找到 |
| 枚举值 | output | code | 说明 |
|---|
METHOD_NOT_ALLOWED | MethodNotAllowed | 40501 | 方法不允许 |
| 枚举值 | output | code | 说明 |
|---|
NOT_ACCEPTABLE | NotAcceptable | 40601 | 不可接受 |
| 枚举值 | output | code | 说明 |
|---|
TIMEOUT | Timeout | 40801 | 请求超时 |
CONNECTION_TIMEOUT | ConnectionTimeout | 40802 | 连接超时 |
READ_TIMEOUT | ReadTimeout | 40803 | 读取超时 |
WRITE_TIMEOUT | WriteTimeout | 40804 | 写入超时 |
| 枚举值 | output | code | 说明 |
|---|
TOO_MANY_REQUESTS | TooManyRequests | 42901 | 请求过多 |
REQUEST_RATE_TOO_HIGH | RequestRateTooHigh | 42902 | 请求频率过高 |
| 枚举值 | output | code | 说明 |
|---|
SERVER_INTERNAL_ERROR | ServerInternalError | 50001 | 服务器内部错误 |
DATABASE_ERROR | DatabaseError | 50002 | 数据库错误 |
CACHE_ERROR | CacheError | 50003 | 缓存错误 |
FILE_ERROR | FileError | 50004 | 文件错误 |
STORAGE_ERROR | StorageError | 50005 | 存储错误 |
REMOTE_CALL_ERROR | RemoteCallError | 50006 | 远程调用错误 |
CONFIGURATION_ERROR | ConfigurationError | 50007 | 配置错误 |
RESOURCE_EXHAUSTED | ResourceExhausted | 50008 | 资源耗尽 |
NETWORK_ERROR | NetworkError | 50009 | 网络错误 |
NETWORK_NOT_SUCCESS | NetworkNotSuccess | 50010 | 网络请求不成功 |
| 枚举值 | output | code | 说明 |
|---|
GATEWAY_ERROR | GatewayError | 50201 | 网关错误 |
SERVICE_UNAVAILABLE | ServiceUnavailable | 50301 | 服务不可用 |
SYSTEM_MAINTENANCE | SystemMaintenance | 50302 | 系统维护 |
| 枚举值 | output | code | 说明 |
|---|
UNKNOWN_ERROR | UnknownError | 50999 | 未知错误 |
import com.xlf.utility.BaseResponse;
import com.xlf.utility.ErrorCode;
// 使用 ErrorCode 字段构造标准错误响应
BaseResponse<Void> response = new BaseResponse<>(null, ErrorCode.PARAMETER_ERROR.getOutput(),
ErrorCode.PARAMETER_ERROR.getCode(), ErrorCode.PARAMETER_ERROR.getMessage(), "用户名不能为空", null, null);
import com.xlf.utility.ErrorCode;
import com.xlf.utility.exception.library.BusinessException;
public UserDTO getUserById(Long id) {
if (id == null) {
// 抛出携带 ErrorCode 的业务异常,由全局异常处理器统一捕获
throw new BusinessException("用户 ID 不能为空", ErrorCode.PARAMETER_MISSING);
}
// ...
}
public void validateToken(String token) {
if (token == null || token.isEmpty()) {
throw new BusinessException("令牌不能为空", ErrorCode.UNAUTHORIZED);
}
if (isTokenExpired(token)) {
// 根据具体场景选择最精确的错误码
throw new BusinessException("令牌已过期,请重新登录", ErrorCode.EXPIRED);
}
}