在实际项目中,有很多地方都会运用到枚举,为啥使用枚举可以自行百度。很多时候我们返回给前端的实体里面也会包含枚举属性,
如果你只返回一个code给前端的话,那他可能就懵了,这返回的是啥玩意,就比如:
public enum PeriodLoanBillEnum {
WAIT_REPAY("WAIT_REPAY", "待还款"),
PARTIAL_REPAY("PARTIAL_REPAY", "部分还款中"),
ALL_REPAY("ALL_REPAY", "全额还款中"),
PARTIAL_SETTLED("PARTIAL_SETTLED", "部分结清"),
ALREADY_SETTLED("ALREADY_SETTLED", "已结清"),
NOT_SETTLED("NOT_SETTLED", "未结清");
/**
* 枚举值码
*/
private final String code;
/**
* 枚举描述
*/
private final String message;
}
这个枚举里,我给你返回一个WAIT_REPAY,你肯定要骂我,这是啥玩意儿,谁能看懂啊。所以,我们就要做一下处理以
billEnum:{
code:"WAIT_REPAY",
name:"待还款"
}
如果我以这样的方式返回给你 就ok了 你肯定就不得骂我了。那要实现这样 可以怎么做呢。
1、定义一个接口,BaseEnum
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface BaseEnum {
}
这里要注意了,注意@JsonFormat的用法,这个注解就是把我们要返回的枚举以对象的形式进行序列化,也就是转成(key,value)的格式,你可以理解成就是转换成Json格式,你细心点你可以发现 比如我下面的这个枚举,每个枚举值都有code和message属性,你就可以把它(每个枚举值)看做是一个对象.
2、定义枚举实现BaseEnum
@Getter
public enum PeriodLoanBillEnum implements BaseEnum{
WAIT_REPAY("WAIT_REPAY", "待还款"),
PARTIAL_REPAY("PARTIAL_REPAY", "部分还款中"),
ALL_REPAY("ALL_REPAY", "全额还款中"),
PARTIAL_SETTLED("PARTIAL_SETTLED", "部分结清"),
ALREADY_SETTLED("ALREADY_SETTLED", "已结清"),
NOT_SETTLED("NOT_SETTLED", "未结清"),
;
/**
* 枚举值码
*/
private final String code;
/**
* 枚举描述
*/
private final String message;
/**
* @param code 枚举值码。
* @param message 枚举描述。
*/
PeriodLoanBillEnum(String code, String message) {
this.code = code;
this.message = message;
}
/**
* 获取全部枚举
*/
public static List getAllEnum() {
List list = Lists.newArrayList();
list.addAll(Arrays.asList(values()));
return list;
}
/**
* 获取全部枚举值
*
* @return List
*/
public static List getAllEnumCode() {
List list = Lists.newArrayList();
for (PeriodLoanBillEnum each : values()) {
list.add(each.code());
}
return list;
}
/**
* 通过Code获取枚举
*/
public static PeriodLoanBillEnum getEnumByCode(String code) {
PeriodLoanBillEnum result = null;
for (PeriodLoanBillEnum statusEnum : getAllEnum()) {
if (statusEnum.code.equals(code)) {
result = statusEnum;
break;
}
}
return result;
}
/**
* 得到枚举值码。
*
* @return 枚举值码。
*/
public String code() {
return code;
}
/**
* 得到枚举描述。
*
* @return 枚举描述。
*/
public String message() {
return message;
}
}
注意我所定义的这个枚举,使用了@Getter注解,解释一下,这个注解是Lombok包的,这是一个idea的插件也是一个jar包,包括@Getter @Setter等注解,使用这个注解相当于就是替换了get set方法,在编译的时候会自动加上,整个实体就不会显得那么的臃肿。使用的话引入Lombok的依赖,然后在idea下载一个 lombok plugin的插件就可以用了。
言归正传,很多的枚举在使用的时候 根本不需要get方法,因为我可以通过枚举名称+“.”的方式就可以获取枚举值,但是这里你要返回给前端就需要get方法了,再加上@JsonFormat注解,就可以实现了。
3、示例
我定义一个实体
public class PeriodLoanBillManagerVo{
/**
* 主键
*/
private Long id;
private Money unpaidAmount;
private PeriodLoanBillEnum periodLoanBillEnum;
private Date createTime;
private Date updateTime;
private String contactPhone;
}
然后查询返回给前端这个vo,然后前端看到的效果就是:
大功告成~~ 这样前端老哥想要啥就取啥,也别来烦我O(∩_∩)O哈哈~