♣通过枚举实现状态、描述的的定义
@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>