此模块主要针对前端进行枚举的规范化输出。

仓库坐标

Maven

<dependency>
    <groupId>com.luamas.thinkbridge</groupId>
    <artifactId>enum-spring-boot-starter</artifactId>
</dependency>

Gradle

implementation("com.luamas.thinkbridge:enum-spring-boot-starter")

接口规范

实现 IEnum 接口的枚举类将被自动收集并规范化输出。

方法

说明

getName()

获取枚举名称,用于前端展示

getValue()

获取枚举值

getDesc()

获取枚举描述

package com.luamas.thinkbridge.common.base.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.luamas.thinkbridge.common.base.utils.IEnumUtils;

import java.io.Serializable;

/**
 * 枚举接口,form表单仅支持常规类型:String.Integer,Long,Boolean
 *
 * @author luamas
 */
public interface IEnum<T> extends Serializable {
    @JsonValue
    @JsonCreator
    T getValue();

    String getName();

    String getInfo();

    default IEnum<T> getDefault() {
        return null;
    }

    default IEnum<T> getObject(T value) {
        try {
            return IEnumUtils.getIEnumByValue(this.getClass(), value);
        } catch (Exception e) {
            return null;
        }
    }
}

示例

定义枚举类并实现 IEnum 接口:

package com.luamas.thinkbridge.integration.demo.enums;

import com.luamas.thinkbridge.common.base.enums.IEnum;

public enum TestEnum implements IEnum<Integer> {
    test1(0, "UNKNOWN", "未知"),
    test23(1, "MALE", "男"),
    getTest2344(2, "FEMALE", "女");

    private final Integer value;
    private final String name;
    private final String info;

    TestEnum(Integer value, String name, String info) {
        this.value = value;
        this.name = name;
        this.info = info;
    }

    public Integer getValue() {
        return this.value;
    }

    public String getName() {
        return this.name;
    }

    public String getInfo() {
        return this.info;
    }

    public IEnum<Integer> getDefault() {
        return test1;
    }
}

控制器:

package com.luamas.thinkbridge.integration.demo.enums;

import com.luamas.thinkbridge.common.spring.enums.IEnumService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@Tag(name = "枚举处理", description = "IEnum 枚举接口示例 - 展示枚举自动转换和注册")
@RequestMapping("enums")
@RequiredArgsConstructor
public class TestController {

    private final IEnumService iEnumService;

    @Operation(summary = "测试枚举序列化", description = "返回一个枚举实例,查看 JSON 序列化结果")
    @GetMapping("1")
    public TestEnum enums() {
        return TestEnum.getTest2344;
    }

    @Operation(summary = "测试枚举反序列化", description = "通过请求参数传递枚举名称,展示自动转换")
    @GetMapping("2")
    public TestEnum enums1(
            @Parameter(description = "枚举名称", example = "TEST_2344")
            TestEnum testEnum) {
        return testEnum;
    }

    @Operation(summary = "获取所有已注册枚举", description = "获取项目中所有实现了 IEnum 接口的枚举列表")
    @GetMapping("all")
    public Object allEnums() {
        return iEnumService.getIEnumObjects();
    }
}
可以使用 IEnumService 接口获取所有枚举类,枚举类默认返回 getName 方法的值。