💡 从业务中抽象通用能力:我如何封装了一个实用的 Spring Boot Starter 框架

💡 从业务中抽象通用能力:我如何封装了一个实用的 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 项目地址

项目地址(随机更新):

👉 github.com/2500639734/...

欢迎 Star ⭐、Fork 🔁、提 Issue 💬、提 PR 🛠!

相关推荐
武子康4 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
舒一笑4 小时前
我的开源项目-PandaCoder迎来史诗级大更新啦
后端·程序员·intellij idea
@昵称不存在5 小时前
Flask input 和datalist结合
后端·python·flask
zhuyasen6 小时前
Go 分布式任务和定时任务太难?sasynq 让异步任务从未如此简单
后端·go
东林牧之6 小时前
Django+celery异步:拿来即用,可移植性高
后端·python·django
超浪的晨7 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
AntBlack7 小时前
从小不学好 ,影刀 + ddddocr 实现图片验证码认证自动化
后端·python·计算机视觉
Pomelo_刘金8 小时前
Clean Architecture 整洁架构:借一只闹钟讲明白「整洁架构」的来龙去脉
后端·架构·rust
双力臂4048 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
midsummer_woo9 小时前
基于spring boot的医院挂号就诊系统(源码+论文)
java·spring boot·后端