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

先建一个枚举基类

复制代码
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": "其他"
			}
		]
	}
}
相关推荐
纪元A梦4 分钟前
贪心算法应用:信用评分分箱问题详解
java·算法·贪心算法
一叶飘零_sweeeet25 分钟前
从 MySQL 到 TiDB:分布式数据库的无缝迁移与实战指南
数据库·mysql·tidb
007php00732 分钟前
Redis高级面试题解析:深入理解Redis的工作原理与优化策略
java·开发语言·redis·nginx·缓存·面试·职场和发展
axban1 小时前
QT M/V架构开发实战:QStandardItemModel介绍
开发语言·数据库·qt
没学上了1 小时前
数据库建立库-Qt
数据库
Yeats_Liao1 小时前
Spring缓存(二):解决缓存雪崩、击穿、穿透问题
java·spring·缓存
猿究院-赵晨鹤1 小时前
String、StringBuffer 和 StringBuilder 的区别
java·开发语言
葵野寺1 小时前
【RelayMQ】基于 Java 实现轻量级消息队列(九)
java·开发语言·rabbitmq·java-rabbitmq
我是zxb1 小时前
EasyExcel:快速读写Excel的工具类
数据库·oracle·excel
代码不停1 小时前
MySQL联合查询
java·数据库·mysql