💡 从业务中抽象通用能力:我如何封装了一个实用的 Spring Boot Starter 框架
一次 Spring Boot Starter 封装实践,沉淀工程经验,构建属于自己的开发规范体系。
👋 背景动机
我们做 Java Web 项目的时候经常遇到这些情况:
- 每次新项目都要手动配置接口文档(Swagger / Knife4j)、参数校验、统一响应结构等;
- 每个团队的异常处理、错误码定义、国际化方式都不一致;
- 重复代码 copy-paste,维护成本高,出问题不好排查;
- 想封装成 Starter,但网上一搜全是"Hello World 级别"的文章,缺乏深入实践参考。
于是我决定动手封装一套 实用级别的 Spring Boot Starter 框架,目标就是:
把日常 Web 开发中 80% 的重复性基础能力,抽象出来做成"可插拔、可配置、开箱即用"的组件。
这就是 Solo Framework 的由来。
🧱 框架模块设计
框架整体结构如下图所示:
模块名 | 说明 |
---|---|
starter-core |
统一上下文加载、异常处理、响应封装等核心逻辑 |
starter-web |
接口文档、参数校验增强、国际化配置等 |
starter-mts |
MyBatis Plus 自动配置支持 |
starter-rocketmq |
RocketMQ 支持模块(规划中) |
starter-redis |
Redis 缓存/分布式锁支持(规划中) |
🚀 关键功能与实现思路
✅ 统一响应结构封装
通过 ResponseBodyAdvice
拦截返回值,自动封装为标准结构:
json
{
"code": 0,
"message": "请求成功",
"data": { ... },
"timestamp": 1726757122136,
"traceId": "xxx"
}
支持通过注解 @NoApiResponse
屏蔽特定接口自动包装。
✅ 全局异常处理机制
框架统一捕获常见异常(如 404/400/JSR-303 校验失败/业务异常等),并输出结构化响应,同时支持自定义错误码:
java
throw new IErrorException(CommonErrorCodeEnum.USER_NOT_FOUND);
支持配置异常级别输出日志(INFO / WARN / ERROR)。
✅ 参数校验增强
- ✅ 支持分组校验(内置
QueryGroup
/CreateGroup
/UpdateGroup
等接口) - ✅ 支持集合参数校验(
ValidationList<T>
) - ✅ 支持枚举字段校验(
@EnumPattern
自定义注解)
示例:
java
@NotBlank(message = "用户类型不能为空")
@EnumPattern(message = "不在枚举范围内", type = UserTypeEnum.class, fieldName = "code")
private Integer userType;
✅ 国际化能力内置
支持 i18n 错误码绑定、国际化资源加载和语言切换:
yml
solo:
framework:
web:
internation:
enabled: true
baseNames:
- i18n/messages
- i18n/validation/messages
locale: CHINA
可通过接口 /solo-framework/set-locale?lang=en-US
动态切换语言。
✅ FastJson2 集成 + JSON格式规范
默认序列化策略:
- 日期格式统一为
yyyy-MM-dd HH:mm:ss
- null 字段不输出
- 驼峰命名策略
- 支持通过 YAML 或 Java 配置类覆盖默认行为
✅ Swagger / Knife4j 文档开箱即用
只需配置:
yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${your_url}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: ${your_username}
password: ${your_password}
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
type-aliases-package: ${your_package_name}
即可访问:
- Swagger-UI 👉
http://localhost:8080/swagger-ui/index.html
- Knife4j 👉
http://localhost:8080/doc.html
🧭 GitHub 项目地址
项目地址(随机更新):
欢迎 Star ⭐、Fork 🔁、提 Issue 💬、提 PR 🛠!