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


    先建一个枚举基类

    1. package com.example.common.enums;
    2. import com.baomidou.mybatisplus.annotation.IEnum;
    3. import java.io.Serializable;
    4. /**
    5. * 枚举基类
    6. * @param
    7. */
    8. public interface IEnumWithStr<T extends Serializable> extends IEnum<T> {
    9. String getStrValue();
    10. static <E extends Serializable, T extends IEnum<E>>T getByValue(Class enumClass, Integer value) {
    11. if (value == null) {
    12. return null;
    13. }
    14. for (T tmp : enumClass.getEnumConstants()) {
    15. if (tmp.getValue().equals(value)) {
    16. return tmp;
    17. }
    18. }
    19. throw new IllegalArgumentException("No element matches " + value);
    20. }
    21. }

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

    1. package com.example.common.enums;
    2. import com.baomidou.mybatisplus.annotation.EnumValue;
    3. import com.baomidou.mybatisplus.annotation.IEnum;
    4. import com.fasterxml.jackson.annotation.JsonValue;
    5. import lombok.Getter;
    6. /**
    7. * 变量类别,枚举,用于展示在变量插入的类别
    8. * 基本信息,薪酬信息,其他等、常量
    9. */
    10. @Getter
    11. public enum CategoryEnum implements IEnumWithStr<Integer> {
    12. BASE(1,"基本信息"),
    13. SALARY(2,"薪酬信息"),
    14. CONSTANT(3,"常量"),
    15. OTHER(4,"其他");
    16. private Integer code;
    17. private String msg;
    18. CategoryEnum(Integer code, String msg) {
    19. this.code = code;
    20. this.msg = msg;
    21. }
    22. /**
    23. * 返回值,加@JsonValue的注解就是在返回前端的时候返回枚举值,而不是json字符串
    24. * @return
    25. */
    26. @Override
    27. @JsonValue
    28. public Integer getValue() {
    29. return this.code;
    30. }
    31. @Override
    32. public String getStrValue() {
    33. return this.msg;
    34. }
    35. }

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

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

    具体实现如下:

    1. @GetMapping("/getSelect")
    2. public <T> CommonResult< OfferFieldOptionDTO> getEnums(@RequestParam String key) {
    3. Class<?> aClass = enumsMap.get(key);
    4. if (aClass == null) {
    5. return CommonResult.success(null);
    6. }
    7. Class<?> enumClass = enumsMap.get(key);
    8. OfferFieldOptionDTO fieldOptionDTO = new OfferFieldOptionDTO();
    9. if (enumClass != null) {
    10. List<OptionDTO> optionDTOList = new ArrayList<>();
    11. IEnumWithStr<?>[] enums = (IEnumWithStr[]) enumClass.getEnumConstants();
    12. for (IEnumWithStr<?> anEnum : enums) {
    13. OptionDTO optionDTO = new OptionDTO();
    14. optionDTO.setName(anEnum.getStrValue().toString());
    15. optionDTO.setValue(anEnum.getValue().toString());
    16. optionDTOList.add(optionDTO);
    17. // 将Map添加到集合中
    18. }
    19. fieldOptionDTO.setOptions(optionDTOList);
    20. }
    21. return CommonResult.success(fieldOptionDTO);
    22. }

    最后返回的结果如下:

    1. {
    2. "code": 200,
    3. "message": "操作成功",
    4. "data": {
    5. "options": [
    6. {
    7. "value": "1",
    8. "name": "基本信息"
    9. },
    10. {
    11. "value": "2",
    12. "name": "薪酬信息"
    13. },
    14. {
    15. "value": "3",
    16. "name": "常量"
    17. },
    18. {
    19. "value": "4",
    20. "name": "其他"
    21. }
    22. ]
    23. }
    24. }

  • 相关阅读:
    vue面试题
    杰理之立体声输入【篇】
    合成事件在san.js中的应用
    通过题目入门python基础1
    1688商品详情API跨境专用接口php java
    RabbitMQ中的死信队列产生的几个条件和应用场景
    【Linux】Linux系统中安装Zookeeper集群的详细配置
    2022年11月20日 15点 纳指正在走到一个黄金分割点附近,是否会真的按照自然规则做调整,可以看看数据的威力。
    西门子smart200,1200,1500,300,400全系列的PLC与巨控GRM530实现远程上下载程序
    csdn,是时候说再见!
  • 原文地址:https://blog.csdn.net/qq_31450641/article/details/136273550