一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
返回值设计
返回值格式
统一JSON的格式返回,定义如下:
{
"code": "string",
"subCode":"string",
"msg": "string",
"result": {}
}
code为返回码,兼容已有代码,只有成功(0x00000000)和失败(0x80000000)两种code
subCode为明细返回码,标识详细错误编码
msg为返回信息描述,可以通过通配符{},来动态插入msg信息,具体见代码BaseResponsev1.java
result为返回值结果
返回码
- 返回码定义的区间定义如下:
| 返回码范围 | 描述 |
|---|---|
| 0x00000000 | 处理成功 |
| 0x80000000 | 处理失败 |
明细返回码
明细返回码,标识详细错误编码,由两部分构成,例如:0001.1000,
0001标识具体服务例如:建模服务、脚本引擎服务;
1000标识具体的错误原因代码
| 返回码范围 | 描述 |
|---|---|
| ****.0x00000000 | 处理成功 |
| ****.0x80000000 | 处理失败 |
| ****.10000-19999 | 服务不可用 |
| ****.20000-29999 | 参数异常 |
| ****.20000-21999 | 缺少参数 |
| ****.22000-23999 | 数据不存在 |
| ****.24000-26999 | (暂留定义区间) |
| ****.27000-29999 | 其他异常 |
| ****.30000-39999 | 用户权限异常 |
| ****.40000-49999 | 接口异常 |
msg
msg为错误返回信息描述
result
result为返回值结果
代码实现介绍
枚举类
使用枚举类关联返回码与msg:
- ResultCodeEnum:数据返回中的code枚举类:
==这个类不需要修改,所有的错误编码都在ResultSubCode中定义==
package com.emcc.asset.response.v1;
/**
* @Auther: wangwei
* @Date: 2019-02-06 14:38
* @Description:ResultCodeEnum数据返回的code公共枚举类
*/
public enum ResultCodeEnum {
/**
* 失败
**/
FAIL("0x80000000", "FAIL"),
/**
* 成功
**/
OK("0x00000000", "SUCCESS");
}
- ResultSubCode:数据返回中的code枚举类:
==1.根据具体的错误信息,在相应的模块里添加错误码,优先使用已存在的错误码,在创建的时候考虑通用性==
==2.在改类中定义了一个变量:PREFIX,在getSubCode()方法中作为前缀返回,如果创建了新的项目,该变量需要修改==
==返回码枚举要分区域按顺序填写!!!==
package com.emcc.asset.response.v1;
/**
* @Auther: wangwei
* @Date: 2019-02-06 14:38
* @Description:ResultCodeEnum数据返回的code公共枚举类
*/
public enum ResultSubCodeEnum {
/**
* 失败
**/
FAIL("0x80000000", "FAIL"),
/**
* 成功
**/
OK("0x00000000", "SUCCESS")
- ResultSubCodePrefixEnum:ResultSubCode的前缀枚举:
==新的项目需要重新定义,并修改ResultSubCode中的Prefix值==
package com.emcc.asset.response.v1;
/**
* @Auther: wangwei
* @Date: 2019-02-06 14:38
* @Description:ResultSubCode的前缀枚举
*/
public enum ResultSubCodePrefixEnum {
/**
* 失败
**/
MODEL_SERVER("0001","建模工具");
private String code;
private String msg;
ResultSubCodePrefixEnum(final String code, final String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
返回值
- BaseResponsev1:根据返回值定义和枚举类,构建统一的返回类: 公共类提供一下几个static方法:
- basicResult:最基础的方法,包含所有的构造信息
- ok():成功-没有返回值
- ok(Object data):成功-有返回值
- fail(ResultSubCodeEnum resultSubCodeEnum, String... msgVars):失败-失败代码(必选)+失败信息参数(可选)
- failApiError(String exceptionMsg):针对API异常封装的失败,只需要填写异常的信息e.getMessage()。异常信息是否打印可以配置,默认打印。大部分未解析的异常(比如数据库返回的异常)可以使用这个方法修改,例如:
catch (Exception e) {
return BaseResponsev1.failApiError(e.getMessage());
}
- failWithResult(ResultSubCodeEnum resultSubCodeEnum, Object data):失败-有返回值的失败,预设