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

先建一个枚举基类

复制代码
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": "其他"
			}
		]
	}
}
相关推荐
AWS官方合作商8 分钟前
在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
java·云原生·aws
gadiaola1 小时前
【JVM】Java虚拟机(二)——垃圾回收
java·jvm
Zfox_1 小时前
Redis:Hash数据类型
服务器·数据库·redis·缓存·微服务·哈希算法
陈丹阳(滁州学院)3 小时前
若依添加添加监听容器配置(删除键,键过期)
数据库·oracle
coderSong25684 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
远方16094 小时前
14-Oracle 23ai Vector Search 向量索引和混合索引-实操
数据库·ai·oracle
Mr_Air_Boy5 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?5 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
GUIQU.5 小时前
【Oracle】数据仓库
数据库·oracle
年老体衰按不动键盘5 小时前
快速部署和启动Vue3项目
java·javascript·vue