我们在开发中,为了保持项目运行的效率,降低数据库的冗余,往往会使用Code来代表某些信息,而不把全部的信息都存到一个表中,比如某个项目中,我们的商品有上架或者下架的状态,某个订单有新订单,已完结,已支付等状态,我们往往都会用一个数字code 来表示状态,而不是存全部,那样冗余太大。
我们的状态往往都会使用一个枚举类存起来
但是有时候我们需要向前端传输我们某个对象的状态的详情的时候,我们需要取出状态码,然后遍历枚举类对比,才能找到我们的状态详情,这种操作很明显是应该封装起来的。
以订单状态为例
1.创建Code接口
/**
* @author: 林之谦
* @date: 2018/7/31
* @description:
*/
public interface CodeEnum<T> {
public Integer getCode();
}
2.创建枚举类并继承CodeEnum
/**
* @author: 林之谦
* @date: 2018/7/27
* @description:
*/
@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.创建查找枚举对象的工具类
/**
* @author: 林之谦
* @date: 2018/7/31
* @description:
*/
public class EnumUtil {
public static <T extends CodeEnum> T getByCode(Integer code, Class<T> enumClass){
for(T each : enumClass.getEnumConstants()){
if(code.equals(each.getCode())){
return each;
}
}
return null;
}
}
4.在实际传输的DTO实体中创建getStatusEnum的方法
注意用@JsonIgnore注解让方法不被写入Json,使用EnumUtil,传入状态码和状态类,就能获取这个对象的状态详情了
@JsonIgnore
public PayStatusEnum getPayStatusEnum(){
return EnumUtil.getByCode(orderStatus,PayStatusEnum.class);
}
@JsonIgnore
public OrderStatusEnum getOrderStatusEnum(){
return EnumUtil.getByCode(orderStatus,OrderStatusEnum.class);
}