在前后端分离的大趋势下, 服务端如何制定一套行至有效的规则供前端开发使用,显得尤为的重要,既然是前后端分离,那么服务端的架构设计必须满足下面的几个点:首先响应的格式必须统一,其次针对异常能够做到全局响应。下面将针对这个目标来展开讲解。
统一响应类的设计
要想实现针对前端的统一格式响应,就必然需要将最终的结果包装到制定的响应类里,一个好的统一响应类的设计需要具备下面的几个要素:第一包含响应的编码;第二包含响应的信息;第三包含响应的数据;第四设计到的相关的响应码全部以枚举类的形式包含在一个枚举类中
1、枚举类
public enum ResponseCode {
SUCCESS(1000, "操作成功"),
FAILED(1001, "接口错误"),
VALIDATE_FAILED(1002, "参数校验失败"),
REQUEST_PATH_ERROR(404, "请求资源路径错误"),
ERROR(500, "服务器异常,请稍后重试"),
USER_NOT_EXIST(2000,"用户不存在"),
USER_LOGIN_FAIL(2001,"用户名或密码错误"),
USER_NOT_LOGIN(2002,"用户还未登录,请先登录"),
NO_PERMISSION(2003,"权限不足,请联系管理员");
private static Map<Integer, String> map = new HashMap<Integer, String>();
static {
for (ResponseCode r : ResponseCode.values()) {
map.put(r.getCode(), r.getMessage());
}
}
private int code;
private String message;
ResponseCode(int code, String message){
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
/**通过code获取message**/
public String getResponseMessageByCode(int code) {
return map.get(code);
}
}
2、统一响应类
/**全局统一响应类定义**/
public class CommonResponse<T> {
private int code;
private String msg;
private T data;
public CommonResponse(){}
public CommonResponse(T data) {
this(ResponseCode.SUCCESS, data);
}
/**枚举类作为构造参数**/
public CommonResponse(ResponseCode responseCode, T data) {
this.code = responseCode.getCode();
this.msg = responseCode.getMessage();
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
pub