列舉型別的使用、通過code獲取列舉型別
阿新 • • 發佈:2018-12-18
♣通過列舉實現狀態、描述的的定義
@Getter
public enum OrderStatusEnum{
NEW(0, "新訂單"),
FINISHED(1, "完結"),
CANCEL(2, "已取消"),
;
private Integer code;
private String message;
OrderStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
開發過程中,資料庫中存放的是狀態值(0、1…)。一般前端頁面處理時需要根據狀態手動轉換為特定的含義描述。 如果後臺的狀態是通過列舉類維護的話,可以通過狀態(code)獲取對應的列舉,從而獲得描述資訊。
♣列舉工具類,通過Code返回列舉 1.定義列舉類的介面。建立獲取code的方法,用於後續迴圈對比狀態。
/**
* @ClassName CodeEnum
* @Description: 定義列舉型別介面
* @Author lsh
* @Date 2018/10/24 21:31
* @Version
*/
public interface CodeEnum<T> {
T getCode();
}
2.建立列舉類實現規定的介面
/** * @ClassName OrderStatusEnum * @Description: 訂單狀態 * @Author lsh * @Date 2018/10/11 20:57 * @Version */ @Getter public enum OrderStatusEnum implements CodeEnum{ NEW(0, "新訂單"), FINISHED(1, "完結"), CANCEL(2, "已取消"), ; private Integer code; private String message; OrderStatusEnum(Integer code, String message) { this.code = code; this.message = message; } }
3.建立列舉工具類
/** * @ClassName EnumUtil * @Description: 列舉工具類,通過Code返回列舉 * T extends CodeEnum 定義泛型的上限 * enumClass.getEnumConstants() 通過反射取出Enum所有常量的屬性值 * @Author lsh * @Date 2018/10/24 21:38 * @Version */ public class EnumUtil { public static <T extends CodeEnum> T getByCode(Integer code, Class<T> enumClass) { //通過反射取出Enum所有常量的屬性值 for (T each: enumClass.getEnumConstants()) { //利用code進行迴圈比較,獲取對應的列舉 if (code.equals(each.getCode())) { return each; } } return null; } }
4.在返回前端的model裡面,實現獲取列舉的方法。
/**
* @ClassName ProductInfo
* @Description: 商品
* @Author lsh
* @Date 2018/10/7 13:45
* @Version
*/
@Entity
@Data
public class ProductInfo {
@Id
private String productId;
/** 狀態, 0正常1下架. */
private Integer productStatus;
@JsonIgnore
public ProductStatusEnum getProductStatusEnum() {
return EnumUtil.getByCode(productStatus, ProductStatusEnum.class);
}
}
5.頁面中獲取方式。
<td>${orderDTO.getOrderStatusEnum().message}</td>