全局异常码(基于阿里规约)

分类

⭐客户端异常A
⭐服务端异常B
⭐远程调用异常C

为什么用

方便排查和定位出现的异常

在代码中使用

1️⃣定义IErrorCode接口
✨在路径下src/main/java/.../common/convention/errorcode新建接口类IErrorCode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 平台错误码
*/
public interface IErrorCode {

/**
* 错误码
*/
String code();

/**
* 错误信息
*/
String message();
}
2️⃣定义基础错误码(当公司有异常码平台时使用这个,尽量做到复用,可以在此基础上定义新的全局异常码)
✨在src/main/java/.../common/convention/errorcode路径下新建枚举类BaseErrorCode并让其实现IErrorCode接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* 基础错误码定义
*/
public enum BaseErrorCode implements IErrorCode {

// ========== 一级宏观错误码 客户端错误 ==========
CLIENT_ERROR("A000001", "用户端错误"),

// ========== 二级宏观错误码 用户注册错误 ==========
USER_REGISTER_ERROR("A000100", "用户注册错误"),
USER_NAME_VERIFY_ERROR("A000110", "用户名校验失败"),
USER_NAME_EXIST_ERROR("A000111", "用户名已存在"),
USER_NAME_SENSITIVE_ERROR("A000112", "用户名包含敏感词"),
USER_NAME_SPECIAL_CHARACTER_ERROR("A000113", "用户名包含特殊字符"),
PASSWORD_VERIFY_ERROR("A000120", "密码校验失败"),
PASSWORD_SHORT_ERROR("A000121", "密码长度不够"),
PHONE_VERIFY_ERROR("A000151", "手机格式校验失败"),

// ========== 二级宏观错误码 系统请求缺少幂等Token ==========
IDEMPOTENT_TOKEN_NULL_ERROR("A000200", "幂等Token为空"),
IDEMPOTENT_TOKEN_DELETE_ERROR("A000201", "幂等Token已被使用或失效"),

// ========== 一级宏观错误码 系统执行出错 ==========
SERVICE_ERROR("B000001", "系统执行出错"),
// ========== 二级宏观错误码 系统执行超时 ==========
SERVICE_TIMEOUT_ERROR("B000100", "系统执行超时"),

// ========== 一级宏观错误码 调用第三方服务出错 ==========
REMOTE_ERROR("C000001", "调用第三方服务出错");

private final String code;

private final String message;

BaseErrorCode(String code, String message) {
this.code = code;
this.message = message;
}

@Override
public String code() {
return code;
}

@Override
public String message() {
return message;
}
}
3️⃣自定义全局异常码(当公司没有异常码平台时使用这个)
✨在src/main/java/.../common/enums路径下新建枚举类UserErrorCodeEnum并实现IErrorCode接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public enum UserErrorCodeEnum implements IErrorCode {

USER_TOKEN_FAIL("A000200","用户Token验证失败"),

USER_NULL("B000200","用户记录不存在"),

USER_NAME_EXIST("B000201","用户名已存在"),

USER_EXIST("B000202","用户记录已存在"),

USER_SAVE_ERROR("B000203","用户新增失败");

private final String code;

private final String message;

UserErrorCodeEnum(String code, String message) {
this.code = code;
this.message = message;
}

@Override
public String code() {
return code;
}

@Override
public String message() {
return message;
}
}
4️⃣在代码中使用
1
throw new ClientException(UserErrorCodeEnum.USER_NULL);//在这里用到了自定义的全局异常码USER_NULL