為什么會有這篇文章呢?日常生活中遇到了一個問題。聽我慢慢說來
場景
我在組件中封裝了一個BaseResultEnum;用來定義返回的錯誤碼和錯誤信息。
UNKNOWN_EXCEPTION(500, "未知異常,請聯系系統管理員"),
各個業務項目也寫了類似的 枚舉類。但是再返回的時候,必須xxxResultEnum.code,xxxResultEnum.msg 2個參數進行傳遞進來。因為枚舉不能繼承。
實現
有一天忽然發現可以枚舉可以實現接口。上層定義一個統一的接口不就好了
public interface IResultCode {
/**
* 返回碼
*
* @return Integer
*/
Integer getCode();
/**
* 返回消息
*
* @return String
*/
String getMsg();
}
枚舉類
@Getter
@AllArgsConstructor
public enum BaseResultEnum implements IResultCode {
//========================全局結果枚舉==============================//
/**
* 未知異常
*/
UNKNOWN_EXCEPTION(500, "未知異常,請聯系系統管理員"),
/**
* 操作成功
*/
SUCCESS(200, "操作成功"),
/**
* 業務異常
*/
FAILURE(400, "業務異常"),
/**
* 服務未找到
*/
NOT_FOUND(404, "服務未找到");
//========================具體業務自定義異常==============================//
// 建議 一個業務模塊固定的編碼100開始:比如:100001、100002;
/**
* 狀態碼
*/
final Integer code;
/**
* 消息內容
*/
final String msg;
}
這樣的話。業務內就自己定義自己項目內的錯誤信息就可以
@Getter
@AllArgsConstructor
public enum LearningResultEnum implements IResultCode {
/**
* 學習未找到
*/
LEARNING_NOT_FOUND(1001, "該學習未找到");
/**
* 狀態碼
*/
final Integer code;
/**
* 消息內容
*/
final String msg;
}
具體使用
throw new LearningException(LearningResultEnum.LEARNING_NOT_FOUND);
// 這里封裝了一下 就可以直接接口當作參數
public BaseException(IResultCode resultEnum) {
super(resultEnum.getMsg());
this.msg = resultEnum.getMsg();
this.code = resultEnum.getCode();
}