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

先建一个枚举基类

复制代码
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": "其他"
			}
		]
	}
}
相关推荐
jakeswang6 分钟前
全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
数据库·mysql
weixin_456904279 分钟前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_9 分钟前
异步编程CompletionService
java
DKPT13 分钟前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
sibylyue18 分钟前
Guava中常用的工具类
java·guava
Heliotrope_Sun20 分钟前
Redis
数据库·redis·缓存
奔跑吧邓邓子22 分钟前
【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战
java·spring boot·实战·web开发·接口设计
一成码农28 分钟前
MySQL问题7
数据库·mysql
吃饭最爱30 分钟前
JUnit技术的核心和用法
数据库·oracle·sqlserver
专注API从业者30 分钟前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python