前言
在Java企业级开发中,枚举(Enum)是我们经常使用的数据类型,特别是在处理状态码、类型标识等场景。但是,如何优雅地管理和暴露这些枚举数据给前端使用,一直是一个让人头疼的问题。
今天给大家推荐一个我最近开源的枚举字典Spring Boot Starter项目,它能够自动扫描项目中的枚举类,并提供统一的REST API接口,让枚举管理变得前所未有的简单!
项目亮点
核心特性
-
自动扫描:基于注解自动扫描指定包路径下的枚举类
-
多包支持:支持扫描多个包路径,灵活配置
-
注解驱动:使用
@EnableDictionary和@EnumDictionary注解,配置简单 -
REST API:提供统一的枚举字典查询接口
-
高性能:内置缓存机制,避免重复扫描
-
灵活配置:支持注解参数和配置文件两种配置方式
技术栈
-
Java 21+:使用最新的Java特性
-
Spring Boot 3.2.4+:基于最新的Spring Boot版本
-
Maven:标准的Maven项目结构
快速开始
添加依赖
<dependency> <groupId>com.github</groupId> <artifactId>enums-springboot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
启用字典功能
在启动类上添加@EnableDictionary注解:
@SpringBootApplication
@EnableDictionary
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
创建枚举字典
创建枚举类并添加@EnumDictionary注解:
package com.example.enums;
import com.github.enums.annotation.EnumDictionary;
import com.github.enums.scan.Valuable;
@EnumDictionary("用户状态")
public enum UserStatus implements Valuable {
ACTIVE(1, "激活"),
INACTIVE(0, "未激活"),
LOCKED(-1, "锁定");
private final int code;
private final String description;
UserStatus(int code, String description) {
this.code = code;
this.description = description;
}
@Override
public Object getCode() {
return code;
}
@Override
public Object getValue() {
return description;
}
}
访问API
启动应用后,可以通过以下接口访问枚举字典:
# 获取所有枚举类型名称 GET /v1/enums/names # 获取指定枚举的字典项 GET /v1/enums/UserStatus
API接口详解
获取所有枚举类型
请求:
GET /v1/enums/names
响应:
{
"code": 0,
"message": "Success",
"types": [
{
"name": "UserStatus",
"description": "用户状态"
},
{
"name": "OrderStatus",
"description": "订单状态"
}
]
}
获取指定枚举字典
请求:
GET /v1/enums/UserStatus
响应:
{
"code": 0,
"message": "Success",
"items": [
{
"name": "ACTIVE",
"code": 1,
"value": "激活"
},
{
"name": "INACTIVE",
"code": 0,
"value": "未激活"
},
{
"name": "LOCKED",
"code": -1,
"value": "锁定"
}
]
}
高级配置
多包路径扫描
@SpringBootApplication
@EnableDictionary(basePackages = {
"com.example.enums",
"com.example.common.dict",
"com.example.business.enums"
})
public class Application {
// 会扫描所有指定的包路径
}
配置文件配置
spring: dictionary: enabled: true basePackages: - com.example.enums - com.example.common.dict
自定义枚举值
支持字符串类型的code:
@EnumDictionary("订单状态")
public enum OrderStatus implements Valuable {
PENDING("P", "待处理"),
PROCESSING("PR", "处理中"),
COMPLETED("C", "已完成"),
CANCELLED("CA", "已取消");
private final String code;
private final String description;
OrderStatus(String code, String description) {
this.code = code;
this.description = description;
}
@Override
public Object getCode() {
return code;
}
@Override
public Object getValue() {
return description;
}
}
架构设计
核心组件
-
DictionaryImportSelector: 处理
@EnableDictionary注解,决定是否启用字典功能 -
EnumsScanner: 负责扫描枚举类并构建字典缓存
-
EnumsController: 提供枚举字典的REST API接口
-
DictionaryProperties: 字典配置属性类
扫描流程
-
@EnableDictionary注解触发DictionaryImportSelector -
根据注解参数确定要扫描的包路径
-
EnumsStarterAutoConfiguration调用EnumsScanner.scan()进行扫描 -
EnumsScanner扫描指定包下的枚举类,构建缓存 -
EnumsController提供API接口访问缓存数据
使用场景
1. 前端下拉框数据源
// 前端获取用户状态选项
fetch('/v1/enums/UserStatus')
.then(response => response.json())
.then(data => {
// 渲染下拉框选项
data.items.forEach(item => {
console.log(`${item.name}: ${item.value}`);
});
});
2. 数据字典管理
统一管理项目中的所有枚举数据,避免硬编码。
3. API文档自动生成
枚举数据自动暴露为API,便于API文档生成和前端对接。
项目优势
相比传统方案的优势:
-
零配置启动:只需添加注解即可使用
-
自动扫描:无需手动注册枚举类
-
统一接口:所有枚举数据通过统一API访问
-
高性能:内置缓存,避免重复扫描
-
灵活配置:支持多包路径和多种配置方式
-
类型安全:基于Java枚举,编译时类型检查
未来规划
- 支持枚举数据的动态更新
- 添加枚举数据的权限控制
- 支持枚举数据的国际化
- 提供枚举数据的可视化管理界面
总结
这个枚举字典Spring Boot Starter项目虽然代码量不大,但是解决了企业级开发中一个很实际的问题。通过自动扫描和统一API的方式,让枚举数据的管理变得简单而优雅。
如果你正在寻找一个轻量级的枚举管理解决方案,或者想要简化项目中的字典数据管理,那么这个项目绝对值得一试!
相关链接
-
GitHub仓库: enums-spring-boot-starter
-
作者: chenxiaoni
-
许可证: Apache-2.0
如果这个项目对你有帮助,请给个⭐️支持一下!也欢迎提交Issue和Pull Request来改进这个项目。
#SpringBoot #Java #枚举 #开源 #Starter #企业级开发
2万+

被折叠的 条评论
为什么被折叠?



