枚举以对象或者Json格式形式返回到前端

在实际项目中,有很多地方都会运用到枚举,为啥使用枚举可以自行百度。很多时候我们返回给前端的实体里面也会包含枚举属性,

如果你只返回一个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<PeriodLoanBillEnum> getAllEnum() {
        List<PeriodLoanBillEnum> list = Lists.newArrayList();
        list.addAll(Arrays.asList(values()));
        return list;
    }

    /**
     * 获取全部枚举值
     *
     * @return List<String>
     */
    public static List<String> getAllEnumCode() {
        List<String> 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哈哈~

 

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值