单人全栈API生成工具:后端集成 springdoc-openapi、前端集成 openapi-typescript(轻量,只生成类型),配置生成前端类型代码的脚本命令
你遇到的前后端重复定义问题是全栈开发中的常见痛点。针对你目前的技术栈(后端 Java + Spring Boot,前端 TypeScript + Vue/React 等),有几种成熟的解决方案可以彻底消除这种重复劳动。
推荐方案:使用 OpenAPI(Swagger)自动生成前端类型
这是业界最标准、维护成本最低的方案。你只需在后端写好 Java 类(加上注解),前端的所有接口类型就可以自动生成。
具体实施步骤
1. 后端集成 springdoc-openapi(如果还没做)
在 pom.xml 中添加依赖:
xml
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.5.0</version>
</dependency>
启动项目后访问 http://localhost:8080/v3/api-docs 就能获得 OpenAPI JSON 描述文件。
2. 前端使用工具生成 TypeScript 类型
推荐使用 openapi-typescript(轻量,只生成类型)或 openapi-generator(功能更全)。
安装 openapi-typescript:
bash
npm install -D openapi-typescript
添加 npm 脚本:
json
"scripts": {
"gen:api": "openapi-typescript http://localhost:8080/v3/api-docs -o src/api/generated.ts"
}
运行后,CapitalUseResponse 会自动转换成 TypeScript 接口,无需手写。
3. 处理类型映射差异
openapi-typescript 默认的映射规则基本符合你的需求(integer → number,number → number)。对于 BigDecimal 后端会生成 type: number,前端直接使用 number 即可。
如果有个性化需求(比如想把 date-time 映射成 Date 对象),可以通过配置实现。
替代方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| OpenAPI 生成 | 标准、生态成熟、支持请求/响应/校验 | 需要后端增加注解 | 绝大多数 RESTful 项目 |
| GraphQL + 生成器 | 前端可精确选择字段,强类型 | 学习曲线陡峭,需改造接口 | 对数据查询灵活性要求极高 |
| JSON Schema + 自定义脚本 | 完全可控,无第三方依赖 | 需要自己写生成脚本 | 不想引入 Swagger 的轻量场景 |
| 手动同步 + ESLint 检查 | 无额外工具 | 100% 重复劳动,易出错 | 不推荐 |
你的场景最适合 OpenAPI
因为你是单人开发,使用 OpenAPI 可以:
-
后端只需写一次类(用
@Schema注解可以补充说明,但不是必须)。 -
前端类型自动生成,而且生成后的类型会直接与后端保持同步(每次后端改完字段,前端重新生成即可)。
-
同时生成 API 调用函数(配合
openapi-typescript-codegen或orval还可以生成 axios 请求代码)。
示例:生成后的前端类型长什么样
typescript
// generated.ts 自动生成,不用手写
export interface CapitalUseResponse {
id: number;
capitalNo: string;
capitalName: string;
// ... 所有字段自动出现
activityInstanceInfo: ActivityInstanceInfo;
}
额外技巧:后端类也能减少重复?
如果你连后端 DTO 也不想一个个手写字段,可以考虑使用 MapStruct 或 Lombok + 注解 来自动映射,但字段定义本身还是得写一次。不过相比前后端都写,已经少了一半工作量。
总结
立即行动:在后端加上 springdoc-openapi,前端用 openapi-typescript。以后你只需要修改 Java 类,运行一条命令就能得到最新的前端类型定义,彻底告别重复劳动。
更多推荐




所有评论(0)