前言
幾乎每個系統或多或少都會有些枚舉,用來減少寫死。有時儲存資料的時候需要使用下拉框選擇枚舉,如下圖
枚舉值 1->GET, 2->POST, 3->PUT, 4->DELETE,而傳到後端的是value比如選擇GET時,傳到後端儲存的是1這個值,controller接收的就是Integer類型。

如上圖,後端可定義枚舉類MethodEnum
/**
* @author meilin.huang
* @version 1.0
* @date 2019-03-23 10:49 AM
*/
public enum MethodEnum {
/**
* get請求方法
*/
GET(1, "GET"),
/**
* post請求方法
*/
POST(2, "POST"),
/**
* put請求方法
*/
PUT(3, "PUT"),
/**
* delete請求方法
*/
DELETE(4, "DELETE");
private Integer value;
private String name;
MethodEnum(Integer value, String name) {
this.value = value;
this.name = name;
}
}
為什麼需要一些枚舉方法
由于前端傳的參數往往都不可控制,比如傳個5過來,明明沒有5對應的method枚舉,但是如果不校驗的話,存入資料庫,就會造成了無用的資料。此時就可以在MethodEnum中添加一個靜态方法來判斷5是否為合理合法的枚舉狀态。
/**
* 判斷枚舉值是否存在
*/
public static boolean isExist(Integer value) {
if (value == null) {
return false;
}
for (MethodEnum e : values()) {
if (value.equals(e.getValue())) {
return true;
}
}
return false;
}
而controller就需要如下校驗:
MethodEnum.isExist(5);
EnumUtils
明顯的幾乎每個枚舉都需要類似的方法,如果每個枚舉都寫這樣的方法就顯得太重複了且備援了。
是以可以定義一個BaseEnum的接口,每個枚舉都去繼承該接口。
/**
* V:枚舉值類型
* @author meilin.huang
* @version 1.0
* @date 2019-03-22 11:04 AM
*/
public interface BaseEnum {
/**
* 擷取枚舉值
* @returnint
*/
Integer getValue();
/**
* 擷取枚舉名稱
* @return
*/
String getName();
}
上述的MethodEnum隻要繼承BaseEnum即可
public enum MethodEnum implements BaseEnum
之後就可以使用EnumUtils來統一進行判斷,而具體的EnumUtils如下:
/**
* @author meilin.huang
* @version 1.0
* @date 2019-03-22 11:12 AM
*/
public final class EnumUtils {
/**
* 判斷枚舉值是否存在于指定枚舉數組中
* @param enums 枚舉數組
* @param value 枚舉值
* @return
*/
public static boolean isExist(BaseEnum[] enums, Integer value) {
if (value == null) {
return false;
}
for (BaseEnum e : enums) {
if (value.equals(e.getValue())) {
return true;
}
}
return false;
}
/**
* 根據枚舉值擷取其對應的名字
* @param enums
* @param value
* @return
*/
public static String getNameByValue(BaseEnum[] enums, Integer value) {
if (value == null) {
return "";
}
for (BaseEnum e : enums) {
if (value.equals(e.getValue())) {
return e.getName();
}
}
return "";
}
}
而在Controller層就可以使用如下方式進行判斷:
if (!EnumUtils.isExist(MethodEnum.values(), permission.getMethod())) {
throw new BusinessRuntimeException("權限method錯誤!");
}
總結
使用枚舉工具類可以友善地解決每個枚舉類中備援的代碼,不必為每個枚舉都寫類似的方法,且也可以統一管理這些枚舉。
有關更多的使用方式可以關注本人小項目,哈哈哈哈~~~~~~
位址如下: https://gitee.com/objs/mayfly