# 缘由
常见在前端调用后端api接口时通常有如下三个字段:
code: 1, 1表示成功,0表示错误
message:"成功"
data:{}
2
3
code值为1和0来区分成功或者失败,也有人用Http的code,200表示成功等等。
但是考虑下分布式的场景,服务比较多,场景比较多,业务相对复杂点,当你调用其他服务的接口,需要在某个特定的场景下做一些事情的时候,需要怎么区分,或者可以看看其他开放平台接口。比如微信,支付宝等等,你会发现都会对不同的返回结果有个特殊的返回码。
所以如果对于一个长期维护的产品而言,把返回码维护好是非常重要的和必要的。
# 返回码维护的好处
- 便于长期维护
- 避免在java代码中直接写字符串,不符合阿里规约
- 便于将来的服务拆分和扩展
- 便于与其他系统进行对接和开放接口
- 便于前端做更加细致的操作
- 暂时想到这么多
# ResponseCodeConst类设计
希望有个地方来维护这些返回码,通常最简单的想法是放到一个常量类或者枚举enum类里面,想法挺好,但是这样又有些问题:
- 怎么避免返回码的重复?
- 业务多会导致这个类特别大,难维护
- 如何定义范围?
带着以上问题可以总结如下:
- 为避免类特别大,必须放到多个类里面
- 必须要有范围的定义和说明
- 必须要有全局的码值和避免范围重复的检测机制
所以 ResponseCodeConst 类横空出世。
# 1、代码如下
public class ResponseCodeConst {
// 范围声明
static {
// 通用业务范围,从0开始,step=1000
ResponseCodeContainer.register(ResponseCodeConst.class, 0, 1000);
// 登录业务
ResponseCodeContainer.register(LoginResponseCodeConst.class, 1001, 2000);
// 部门业务
ResponseCodeContainer.register(DepartmentResponseCodeConst.class, 2001, 3000);
//其他
}
public static final ResponseCodeConst SUCCESS = new ResponseCodeConst(1, "success", true);
public static final ResponseCodeConst COMMON_ERROR = new ResponseCodeConst(2, "我错了....");
public static final ResponseCodeConst ERROR_PARAM = new ResponseCodeConst(101, "参数异常!");
protected int code;
protected String msg;
protected boolean success;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 2、ResponseCodeConst基类
- 定义基本属性
- 定义各个业务code范围
- 进行范围和重复检测
- 通用的范围code定义到基类
# 3、范围声明
对于每个业务模块的XxxResponseCodeConst
,继承自基类,并将此类的code的起始值和末尾值注册进来
在ResponseCodeContainer
类中有两个map用于接受注册的code,用于检测。
# 4、启动检测
因为都是static常量,且类结构相同,所以可以在项目启动的时候利用static静态加载和反射技术进行全项目的code值检测。
即 调用ResponseCodeConst.init()
方法
作者简介: 卓大 (opens new window), 1024创新实验室主任,混迹于各个技术圈,熟悉点java,略懂点前端。
![]() | ![]() | ![]() |
加“卓大”微信,入群 | 关注 1024创新实验室! | 我要请 1024创新实验室 喝胡辣汤~ |