此模块主要针对前端进行枚举的规范化输出。
接口规范
实现 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 方法的值。
|