前端根据某个类型获取对应的枚举下拉值,后端通过参数区分来返回枚举下拉

先建一个枚举基类

package com.example.common.enums;


import com.baomidou.mybatisplus.annotation.IEnum;

import java.io.Serializable;

/**
 * 枚举基类
 * @param <T>
 */
public interface IEnumWithStr<T extends Serializable> extends IEnum<T> {
    String getStrValue();

    static <E extends Serializable, T extends IEnum<E>>T getByValue(Class<T> enumClass, Integer value) {
        if (value == null) {
            return null;
        }
        for (T tmp : enumClass.getEnumConstants()) {
            if (tmp.getValue().equals(value)) {
                return tmp;
            }
        }
        throw new IllegalArgumentException("No element matches " + value);
    }
}

再新建一个枚举,并重新实现这个基类里面的getStrValue方法

package com.example.common.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.IEnum;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

/**
 * 变量类别,枚举,用于展示在变量插入的类别
 * 基本信息,薪酬信息,其他等、常量
 */
@Getter
public enum CategoryEnum  implements IEnumWithStr<Integer> {
    BASE(1,"基本信息"),
    SALARY(2,"薪酬信息"),
    CONSTANT(3,"常量"),
    OTHER(4,"其他");

    private Integer code;
    private String msg;

    CategoryEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 返回值,加@JsonValue的注解就是在返回前端的时候返回枚举值,而不是json字符串
     * @return
     */
    @Override
    @JsonValue
    public Integer getValue() {
        return this.code;
    }

    @Override
    public String getStrValue() {
        return this.msg;
    }
}

controller建个接口,具体实现应该在service,但是为了表达意思就直接写在controller里面了

先初始化,需要返回到前端的枚举

具体实现如下:


    @GetMapping("/getSelect")
    public  <T>  CommonResult< OfferFieldOptionDTO> getEnums(@RequestParam String key) {
        Class<?> aClass = enumsMap.get(key);
        if (aClass == null) {
            return CommonResult.success(null);
        }
        Class<?> enumClass = enumsMap.get(key);
        OfferFieldOptionDTO fieldOptionDTO = new OfferFieldOptionDTO();
        if (enumClass != null) {
            List<OptionDTO> optionDTOList = new ArrayList<>();
            IEnumWithStr<?>[] enums = (IEnumWithStr[]) enumClass.getEnumConstants();
            for (IEnumWithStr<?> anEnum : enums) {
                OptionDTO optionDTO = new OptionDTO();
                optionDTO.setName(anEnum.getStrValue().toString());
                optionDTO.setValue(anEnum.getValue().toString());
                optionDTOList.add(optionDTO);
                // 将Map添加到集合中
            }
            fieldOptionDTO.setOptions(optionDTOList);
        }
        return CommonResult.success(fieldOptionDTO);

    }

最后返回的结果如下:

{
	"code": 200,
	"message": "操作成功",
	"data": {
		"options": [
			{
				"value": "1",
				"name": "基本信息"
			},
			{
				"value": "2",
				"name": "薪酬信息"
			},
			{
				"value": "3",
				"name": "常量"
			},
			{
				"value": "4",
				"name": "其他"
			}
		]
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值