java api 错误码设计,枚举错误码设计以及请求响应返回错误码的使用,源码及举例
错误码设计
错误码采用枚举实现,错误码从1001开始,主要是不想和http请求状态码重复比如200,404等。错误码数值怎么给,看自己项目需求,每个功能模块给留足够的数值,比如我给每个模块的范围是1-99 ,通用错误码范围 1001-1099 , 文件模块错误码范围 1101 - 1199 , 其他模块依此类推.
ErrorCodeEnum.java
/**
* @author
*/
public enum ErrorCodeEnum {
SUCCESS("0", "success"),
FAILED("1", "failed"),
//...
COMMON_ACCOUNT_ERROR("1001", "账号错误"),
COMMON_TOKEN_ERROR("1002", "token已过期"),
COMMON_PARAM_EMPTY("1003", "必选参数为空"),
COMMON_PARAM_ERROR("1004", "参数格式错误"),
//...
FILE_NOT_EXIST("1101", "文件不存在"),
//...
SYSTEM_UNKNOWN_ERROR("-1", "系统繁忙,请稍后再试....");
private String code;
private String desc;
ErrorCodeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return this.code;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "ErrorCodeEnum{" + "code='" + code + '\'' + ", desc='" + desc + '\'' + '}';
}
}
上述介绍了错误码的设计,下面结合 响应请求返回数据的结构 举例如何使用。
返回数据的类
Resp.java
import java.io.Serializable;
import java.util.List;
/**
* 请求的返回类
*
* @author
*
* @param <T>
*/
public class Resp<T> implements Serializable {
private static final long serialVersionUID = 1L;
private String code;
private String desc;
private T data;
private List<T> dataList;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public List<T> getDataList() {
return dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
}
private Resp<T> code(String code){
this.code = code;
return this;
}
private Resp<T> desc(String desc){
this.desc = desc;
return this;
}
private Resp<T> data(T data){
this.data = data;
return this;
}
private Resp<T> dataList(List<T> dataList){
this.dataList = dataList;
return this;
}
public Resp<T> success(T data){
return code(ErrorCodeEnum.SUCCESS.getCode()).desc(ErrorCodeEnum.SUCCESS.getDesc()).data(data);
}
public Resp<T> success(List<T> dataList){
return code(ErrorCodeEnum.SUCCESS.getCode()).desc(ErrorCodeEnum.SUCCESS.getDesc()).dataList(dataList);
}
public Resp<T> failed(ErrorCodeEnum errorCodeEnum){
return code(errorCodeEnum.getCode()).desc(errorCodeEnum.getDesc());
}
}
在接口中使用错误码返回伪代码例子
if(参数格式错误){
Resp<String> resp = new Resp<>();
resp.failed(ErrorCodeEnum.COMMON_PARAM_ERROR);
System.out.println("resp:"+new Gson().toJson(resp));
//response(resp);
}
if(打开的文件不存在){
Resp<String> resp = new Resp<>();
resp.failed(ErrorCodeEnum.FILE_NOT_EXIST);
System.out.println("resp:"+new Gson().toJson(resp));
//response(resp);
}
输出结果:
resp:{"code":"1004","desc":"参数格式错误"}
resp:{"code":"1101","desc":"文件不存在"}