用 JSON Schema 一键生成全栈 CRUD 项目:Spring Boot + Angular 实践记录
📢 本文已更新至 v1.1.1:新增 Kafka + MongoDB 异步审计日志系统。详细见文末更新记录。
🛠 项目地址:
github.com/xmyLydia/ra…
💡 背景:如何避免重复写 CRUD
在实际开发中,CRUD 是开发者最常见的需求之一。对于每个实体,我们往往需要重复写:
- 后端:Entity、Repository、Controller、Service…
- 前端:Module、Service、表格页面、表单页面…
- 部署上线前,还需要把代码结构整理清晰
这些工作虽然有套路,但非常消耗时间和精力。
因此,创建一个工具来通过 JSON schema 自动生成前后端结构,成了一个非常有价值的尝试。
🧠 项目简介:rapid-crud-generator
这个工具的目标是:从 JSON schema 出发,自动生成 Spring Boot + Angular 项目结构,并打包为 zip 文件,一键下载即可运行。
🎯 输入:JSON schema
支持用户上传类似以下格式的 schema:
{
"schema": {
"User": {
"id": "Long",
"name": "String"
},
"Product": {
"id": "Long",
"title": "String",
"price": "Double"
}
}
}
📦 输出结构:
解压后的文件结构如下:
example-output/
├── backend/
│ ├── controller/
│ ├── entity/
│ └── repository/
└── frontend/
├── angular.json
├── package.json
└── src/app/
├── user/
├── product/
├── app.module.ts
└── app.component.html
🔧 技术实现
🔹 后端代码生成
使用 FreeMarker 模板引擎,根据 JSON schema 自动生成:
- Entity
- Repository
- Controller
并保存到 output/backend/ 目录中。
🔹 前端代码生成
自动生成 Angular 的:
- Module
- Component(包含 Table 页面)
- Service
写入到 output/frontend/src/app/,并自动更新 app.module.ts 和 app-routing.module.ts,支持直接运行。
🔹 一键打包 zip
通过 Java 将 frontend 和 backend 结构合并,打包为 zip 提供下载。
🧪 踩坑记录
❌ FreeMarker 模板加载失败
一开始在模板加载路径上遇到了 TemplateNotFoundException,原因是模板未正确打包进 target/classes。最终通过 mvn clean install + 使用 setClassLoaderForTemplateLoading 解决。
❌ Angular 类型系统报错
前端自动生成的代码中,TypeScript 类型推断导致 Object 不能赋值为 any[]。最终在模板中显式指定 any[] 类型解决。
❌ IntelliJ 无法运行 Spring Boot
由于缺乏 Run Config,一开始 @SpringBootApplication 无法识别。通过手动创建启动类并设置 main 方法路径解决。
✅ 当前功能(v0.1.0)
- ✅ 支持多个实体的 JSON schema 输入
- ✅ 自动生成后端 + 前端完整代码
- ✅ TypeScript 类型兼容,Angular 可直接运行
- ✅ 支持一键 zip 下载,解压即用
- ✅ README + 示例 schema + 示例输出均已整理
🔮 后续计划(v0.2.0)
- 🧠 AI Prompt 输入:通过自然语言描述自动生成 schema
- 🌍 OpenAPI 支持:支持导入 Swagger 文件生成结构
- 🧩 模板插件机制:支持扩展 DTO、权限、分页等模块
- 🎨 Web UI 版本:提供在线编辑 schema 和实时预览功能
🧩 使用方式
- 克隆项目后运行 Spring Boot 服务
- 使用 Postman / curl 发送 JSON schema 到
/api/generate - 系统将生成代码并打包为 zip,可直接运行或扩展
详见 GitHub 仓库中的使用说明和 README 文档。
⭐ 项目地址
👉 GitHub:
github.com/xmyLydia/ra…
欢迎 Star ⭐、Fork 🍴、提交 Issue 或贡献你的想法!
📦 v1.1.0 更新记录(2025 年 4 月 16 日)
本次更新为 rapid-crud-generator 带来了更完整的 API 支持、更强的扩展性:
✨ 新特性
- ✅ 集成 Swagger UI,可通过
http://localhost:8080/swagger-ui直观测试/api/generate - ✅ 新增 MongoDB 模式支持,通过
"type": "mongo"一键生成基于@Document+MongoRepository的结构 - ✅ 使用结构化 DTO 接收 JSON schema,支持更清晰的 API 输入定义
- ✅ 每次请求自动清空
output/,避免混合内容打包
📘 示例请求:
{
"type": "mongo",
"schema": {
"User": {
"name": "String",
"email": "String"
}
}
}
📦 v1.1.1 更新记录(2025 年 4 月 19 日)
本次更新为 rapid-crud-generator 引入了 Kafka + MongoDB 的异步审计日志系统,实现操作记录可观测、系统解耦、消息非阻塞。
✨ 新特性
- ✅ 每次调用
/api/generate时,将自动发送AuditLogEvent至 Kafka 主题audit-log-topic - ✅ Kafka Consumer 异步监听并写入 MongoDB 的
audit_logs集合 - ✅ 支持 SQL / MongoDB 代码生成场景下的统一审计
- ✅ 配置简洁,使用
spring-kafka+spring-data-mongodb实现非阻塞日志链路
📄 示例日志内容
{
"action": "GENERATE",
"entity": "User,Product",
"payload": "{...originalRequest}",
"timestamp": "2025-04-19T10:00:00"
}
🧭 日志查看方式
你可以通过 MongoDB Compass 或命令行查看:
use rapid_crud_logs
db.audit_logs.find().pretty()
对应配置项在 application.yml 中:
spring:
data:
mongodb:
host: localhost
port: 27017
database: rapid_crud_logs
🛠 技术栈一览
| 模块 | 技术组件 |
|---|---|
| Kafka | spring-kafka, JsonSerializer/Deserializer |
| MongoDB | spring-data-mongodb, AuditLogDocument |
| 解耦机制 | Kafka异步消息、非阻塞写入、无副作用 |
🔗 示例流程图
sequenceDiagram
User->>SpringBoot: POST /api/generate
SpringBoot->>KafkaProducer: Send AuditLogEvent
KafkaProducer->>KafkaBroker: Publish to audit-log-topic
KafkaConsumer->>KafkaBroker: Poll audit-log-topic
KafkaBroker-->>KafkaConsumer: AuditLogEvent
KafkaConsumer->>MongoDB: Save to audit_logs collection
💡 借助 Kafka + MongoDB 的异步日志机制,我们为生成系统提供了真正可观测、可分析、可追踪的审计能力,也为后续拓展日志面板、用户行为追踪打下基础。
👉 查看完整更新:github.com/xmyLydia/ra…
🔗 GitHub 代码 + Release 下载:
- 项目地址:🔗 github.com/xmyLydia/ra…
- 最新 Release:📦 v1.1.1 下载地址