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

先建一个枚举基类

复制代码
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": "其他"
			}
		]
	}
}
相关推荐
晋阳十二夜13 分钟前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL2 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
Fireworkitte2 小时前
Apache POI 详解 - Java 操作 Excel/Word/PPT
java·apache·excel
weixin-a153003083162 小时前
【playwright篇】教程(十七)[html元素知识]
java·前端·html
DCTANT3 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
Touper.3 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
黄雪超3 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice3 小时前
对象的finalization机制Test
java·开发语言·jvm
望获linux5 小时前
【实时Linux实战系列】CPU 隔离与屏蔽技术
java·linux·运维·服务器·操作系统·开源软件·嵌入式软件
JosieBook5 小时前
【Java编程动手学】使用IDEA创建第一个HelloJava程序
java·开发语言·intellij-idea