一、JAVA接口公共返回體ResponseData封裝,使用泛型的經典 例子
public class ResponseData<T> implements Serializable {
? ? /**
?? ? *?
?? ? */
?? ?private static final long serialVersionUID = 7098362967623367826L;
?? ?/**
? ? ?* 響應狀態碼
? ? ?*/
? ? private Integer code;
? ? /**
? ? ?* 響應信息
? ? ?*/
? ? private String message;
? ? /**
? ? ?* 響應對象
? ? ?*/
? ? private T data;
? ? /** 是否加密返回參數*/
? ? private boolean encrypt;
? ? public Integer getCode() {
? ? ? ? return code;
? ? }
? ? public void setCode(Integer code) {
? ? ? ? this.code = code;
? ? }
? ? public String getMessage() {
? ? ? ? return message;
? ? }
? ? public void setMessage(String message) {
? ? ?
? ? ?? ? if(getCode().toString().startsWith("40") || ?getCode().toString().startsWith("50")) {
? ? ?? ??? ? this.message = "內部程序暫時出小差了";?
? ? ?? ? }else {
? ? ?? ??? ? this.message = message;?
? ? ?? ? }
? ? ?? ?
? ? ? ?
? ? }
? ? public T getData() {
? ? ? ? return data;
? ? }
? ? public void setData(T data) {
? ? ? ? this.data = data;
? ? }
? ? public static <T> ResponseData<T> success() {
? ? ? ? return success(ResponseCode.SUCCESS);
? ? }
? ? public static <T> ResponseData<T> success(ResponseCode code) {
? ? ? ? return success(code, null);
? ? }
? ? public static <T> ResponseData<T> success(T object) {
? ? ? ? return success(ResponseCode.SUCCESS, object);
? ? }
? ? public static <T> ResponseData<T> success(ResponseCode code, T object) {
? ? ? ? return success(code.getCode(), code.getMessage(), object);
? ? }
? ? public static <T> ResponseData<T> success(Integer code, String message, T data) {
? ? ? ? ResponseData<T> response = new ResponseData<>();
? ? ? ? response.setCode(code);
? ? ? ? response.setMessage(message);
? ? ? ? response.setData(data);
? ? ? ? return response;
? ? }
? ? public static <T> ResponseData<T> error() {
? ? ? ? return error(ResponseCode.FAILED);
? ? }
? ? public static <T> ResponseData<T> error(ResponseCode code) {
? ? ? ? return error(code, null);
? ? }
? ? public static <T> ResponseData<T> error(String message) {
? ? ? ? return error(ResponseCode.FAILED.getCode(), message, null);
? ? }
? ? public static <T> ResponseData<T> error(Integer code, String message) {
? ? ? ? return error(code, message, null);
? ? }
? ? public static <T> ResponseData<T> error(ResponseCode code, T data) {
? ? ? ? return error(code.getCode(), code.getMessage(), data);
? ? }
? ? public static <T> ResponseData<T> error(Integer code, String message, T data) {
? ? ? ? ResponseData<T> response = new ResponseData<>();
? ? ? ? response.setCode(code);
? ? ? ? response.setMessage(message);
? ? ? ? response.setData(data);
? ? ? ? return response;
? ? }
? ? public boolean isEncrypt() {
? ? ? ? return encrypt;
? ? }
? ? public void setEncrypt(boolean encrypt) {
? ? ? ? this.encrypt = encrypt;
? ? }
}
?
public class ResponseData<T> implements Serializable {/*** */private static final long serialVersionUID = 7098362967623367826L;/*** 響應狀態碼*/private Integer code;/*** 響應信息*/private String message;/*** 響應對象*/private T data;/** 是否加密返回參數*/private boolean encrypt;public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {if(getCode().toString().startsWith("40") || getCode().toString().startsWith("50")) {this.message = "內部程序暫時出小差了"; }else {this.message = message; }}public T getData() {return data;}public void setData(T data) {this.data = data;}public static <T> ResponseData<T> success() {return success(ResponseCode.SUCCESS);}public static <T> ResponseData<T> success(ResponseCode code) {return success(code, null);}public static <T> ResponseData<T> success(T object) {return success(ResponseCode.SUCCESS, object);}public static <T> ResponseData<T> success(ResponseCode code, T object) {return success(code.getCode(), code.getMessage(), object);}public static <T> ResponseData<T> success(Integer code, String message, T data) {ResponseData<T> response = new ResponseData<>();response.setCode(code);response.setMessage(message);response.setData(data);return response;}public static <T> ResponseData<T> error() {return error(ResponseCode.FAILED);}public static <T> ResponseData<T> error(ResponseCode code) {return error(code, null);}public static <T> ResponseData<T> error(String message) {return error(ResponseCode.FAILED.getCode(), message, null);}public static <T> ResponseData<T> error(Integer code, String message) {return error(code, message, null);}public static <T> ResponseData<T> error(ResponseCode code, T data) {return error(code.getCode(), code.getMessage(), data);}public static <T> ResponseData<T> error(Integer code, String message, T data) {ResponseData<T> response = new ResponseData<>();response.setCode(code);response.setMessage(message);response.setData(data);return response;}public boolean isEncrypt() {return encrypt;}public void setEncrypt(boolean encrypt) {this.encrypt = encrypt;}
}
二、返回狀態碼封裝ResponseCode,枚舉類型
public enum ResponseCode {
? ? /* 公共狀態碼 */
? ? SUCCESS(200, "成功"),
? ? FAILED(400, "失敗"),
? ? UNAUTHORIZED(401, "簽名錯誤"),
? ? NOT_FOUND(404, "此接口不存在"),
? ? INTERNAL_SERVER_ERROR(500, "系統繁忙,請稍后再試"),
? ? /* 參數錯誤:10001-19999 */
? ? PARAM_IS_INVALID(10001, "參數無效"),
? ? PARAM_IS_BLANK(10002, "參數為空"),
? ? PARAM_TYPE_BIND_ERROR(10003, "參數類型錯誤"),
? ? PARAM_NOT_COMPLETE(10004, "參數缺失"),
? ? /* 用戶錯誤:20001-29999*/
? ? USER_NOT_LOGGED_IN(20001, "用戶未登錄"),
? ? USER_LOGIN_ERROR(20002, "賬號不存在或密碼錯誤"),
? ? USER_ACCOUNT_FORBIDDEN(20003, "賬號已被禁用"),
? ? USER_NOT_EXIST(20004, "用戶不存在"),
? ? USER_HAS_EXISTED(20005, "用戶已存在"),
? ? LOGIN_CREDENTIAL_EXISTED(20006, "憑證已存在"),
? ? //微信授權 錯誤碼
? ? WEIXIN_ENCRYPT_ERROR(30001,"企業微信授權解密失敗"),
? ??
?? ?
?? ?/*權限相關:40001-49999 */
?? ?NO_PERMISS(40001,"無權限訪問"),
?? ?IS_LIMIT_ACC(40002,"訪問過于頻繁限制訪問"),
? ? /* 業務錯誤:50001-59999 */
?? ?WX_QRCODE_NULL(50001,"微信二維碼獲取內容不可用"),
? ? /* 業務錯誤:60001-69999 */
? ? XSS_CODE_ERROR(60001,"存在xss 惡意攻擊腳本"),
?? ?
?? ?PASS_REPEAT_ERROR(60002,"密碼 不能與 前三次相同,請更換新密碼");
?? ?
? ? private Integer 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;
? ? }
}
public enum ResponseCode {/* 公共狀態碼 */SUCCESS(200, "成功"),FAILED(400, "失敗"),UNAUTHORIZED(401, "簽名錯誤"),NOT_FOUND(404, "此接口不存在"),INTERNAL_SERVER_ERROR(500, "系統繁忙,請稍后再試"),/* 參數錯誤:10001-19999 */PARAM_IS_INVALID(10001, "參數無效"),PARAM_IS_BLANK(10002, "參數為空"),PARAM_TYPE_BIND_ERROR(10003, "參數類型錯誤"),PARAM_NOT_COMPLETE(10004, "參數缺失"),/* 用戶錯誤:20001-29999*/USER_NOT_LOGGED_IN(20001, "用戶未登錄"),USER_LOGIN_ERROR(20002, "賬號不存在或密碼錯誤"),USER_ACCOUNT_FORBIDDEN(20003, "賬號已被禁用"),USER_NOT_EXIST(20004, "用戶不存在"),USER_HAS_EXISTED(20005, "用戶已存在"),LOGIN_CREDENTIAL_EXISTED(20006, "憑證已存在"),//微信授權 錯誤碼WEIXIN_ENCRYPT_ERROR(30001,"企業微信授權解密失敗"),/*權限相關:40001-49999 */NO_PERMISS(40001,"無權限訪問"),IS_LIMIT_ACC(40002,"訪問過于頻繁限制訪問"),/* 業務錯誤:50001-59999 */WX_QRCODE_NULL(50001,"微信二維碼獲取內容不可用"),/* 業務錯誤:60001-69999 */XSS_CODE_ERROR(60001,"存在xss 惡意攻擊腳本"),PASS_REPEAT_ERROR(60002,"密碼 不能與 前三次相同,請更換新密碼");private Integer 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;}
}
?