Swagger Codegen 实战指南:从 OpenAPI 规范到多语言代码生成
1. 引言在前后端分离的开发模式下接口文档与代码实现的一致性一直是团队协作的痛点。Swagger Codegen 作为一款强大的代码生成工具能够基于 OpenAPI原 Swagger规范文件自动生成客户端 SDK、服务端骨架代码以及 API 文档帮助开发者大幅减少重复劳动提升开发效率。本文将围绕 Swagger Codegen 的核心概念、安装方式、命令行用法、Maven 插件集成以及常见自定义配置展开并通过丰富的代码实例演示如何从一份 OpenAPI 规范生成 Java、Python、TypeScript 等多种语言的代码。2. Swagger Codegen 简介Swagger Codegen 是 Swagger 生态中的核心工具之一它读取 OpenAPI 规范文件JSON 或 YAML 格式并根据内置的模板引擎生成对应语言的代码。其核心价值在于多语言支持支持 Java、Python、TypeScript、Go、C#、Ruby 等数十种语言和框架。一致性保障接口定义与代码实现始终以规范文件为准避免文档与代码脱节。可定制化通过模板和配置项可以调整生成代码的风格与结构。需要注意的是Swagger Codegen 目前分为两个主要版本Swagger Codegen 2.x基于 Swagger 2.0 规范和Swagger Codegen 3.x基于 OpenAPI 3.0 规范。此外社区还维护了功能更丰富的OpenAPI Generator分支。本文以 Swagger Codegen 3.x 为主进行讲解。3. 环境准备与安装Swagger Codegen 提供了多种安装方式包括直接下载 JAR 包、使用 Homebrew、Docker 以及 Maven 插件等。下面分别介绍。3.1 下载 JAR 包最简单的方式是直接从 Maven 中央仓库下载可执行的 JAR 包# 下载 Swagger Codegen 3.x 最新版本 wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.46/swagger-codegen-cli-3.0.46.jar -O swagger-codegen-cli.jar 验证安装 java -jar swagger-codegen-cli.jar version3.2 使用 HomebrewmacOSbrew install swagger-codegen 查看版本 swagger-codegen version3.3 使用 Docker# 拉取镜像 docker pull swaggerapi/swagger-codegen-cli 查看帮助 docker run --rm swaggerapi/swagger-codegen-cli help3.4 使用 Maven 插件对于 Java 项目推荐在 Maven 构建流程中集成 swagger-codegen-maven-plugin实现代码生成的自动化plugin groupIdio.swagger.codegen.v3/groupId artifactIdswagger-codegen-maven-plugin/artifactId version3.0.46/version executions execution goals goalgenerate/goal /goals configuration inputSpec${project.basedir}/src/main/resources/api.yaml/inputSpec languagejava/language output${project.build.directory}/generated-sources/output /configuration /execution /executions /plugin4. 准备 OpenAPI 规范文件在生成代码之前我们需要先准备一份 OpenAPI 规范文件。下面以一份简单的用户管理 API 为例创建api.yaml文件openapi: 3.0.0 info: title: User Management API version: 1.0.0 description: 用户管理接口示例 paths: /users: get: summary: 获取用户列表 operationId: getUsers parameters: - name: page in: query required: false schema: type: integer default: 1 - name: size in: query required: false schema: type: integer default: 20 responses: 200: description: 成功返回用户列表 content: application/json: schema: type: array items: $ref: #/components/schemas/User post: summary: 创建新用户 operationId: createUser requestBody: required: true content: application/json: schema: $ref: #/components/schemas/User responses: 201: description: 用户创建成功 content: application/json: schema: $ref: #/components/schemas/User /users/{id}: get: summary: 根据 ID 获取用户 operationId: getUserById parameters: - name: id in: path required: true schema: type: integer responses: 200: description: 成功返回用户信息 content: application/json: schema: $ref: #/components/schemas/User 404: description: 用户不存在 components: schemas: User: type: object required: - id - name properties: id: type: integer format: int64 name: type: string email: type: string format: email createdAt: type: string format: date-time5. 使用命令行生成代码准备好规范文件后就可以使用命令行工具生成代码了。首先查看当前支持的语言列表java -jar swagger-codegen-cli.jar langs输出结果会列出所有可用的语言生成器例如java、python、typescript-axios、go等。5.1 生成 Java 客户端代码java -jar swagger-codegen-cli.jar generate \ -i api.yaml \ -l java \ -o ./generated/java-client \ --group-id com.example \ --artifact-id user-client \ --artifact-version 1.0.0 \ --library okhttp-gson执行完成后在./generated/java-client目录下会生成完整的 Java 客户端工程包含pom.xml、API 接口类、模型类以及调用示例。5.2 生成 Python 客户端代码java -jar swagger-codegen-cli.jar generate \ -i api.yaml \ -l python \ -o ./generated/python-client \ --package-name user_client5.3 生成 TypeScriptAxios客户端代码java -jar swagger-codegen-cli.jar generate \ -i api.yaml \ -l typescript-axios \ -o ./generated/ts-client5.4 生成 Spring Boot 服务端代码java -jar swagger-codegen-cli.jar generate \ -i api.yaml \ -l spring \ -o ./generated/spring-server \ --group-id com.example \ --artifact-id user-server \ --library spring-boot \ --additional-properties interfaceOnlytrue其中interfaceOnlytrue表示只生成接口定义和模型类不生成具体的实现逻辑方便开发者在此基础上自行编写业务代码。6. 生成代码的结构解析以 Java 客户端为例生成的代码结构如下generated/java-client/ ├── pom.xml ├── README.md ├── docs/ │ └── UsersApi.md ├── src/ │ └── main/ │ ├── java/com/example/client/ │ │ ├── api/ │ │ │ └── UsersApi.java │ │ ├── model/ │ │ │ └── User.java │ │ └── ... │ └── resources/ │ └── api.yaml └── .swagger-codegen/ └── VERSION其中UsersApi.java是核心的 API 调用类User.java是对应的数据模型。下面看一下生成的User.java模型类package com.example.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import java.time.OffsetDateTime; public class User { JsonProperty(id) private Long id null; JsonProperty(name) private String name null; JsonProperty(email) private String email null; JsonProperty(createdAt) private OffsetDateTime createdAt null; public User id(Long id) { this.id id; return this; } public Long getId() { return id; } public void setId(Long id) { this.id id; } public User name(String name) { this.name name; return this; } public String getName() { return name; } public void setName(String name) { this.name name; } public User email(String email) { this.email email; return this; } public String getEmail() { return email; } public void setEmail(String email) { this.email email; } public User createdAt(OffsetDateTime createdAt) { this.createdAt createdAt; return this; } public OffsetDateTime getCreatedAt() { return createdAt; } public void setCreatedAt(OffsetDateTime createdAt) { this.createdAt createdAt; } Override public boolean equals(Object o) { if (this o) { return true; } if (o null || getClass() ! o.getClass()) { return false; } User user (User) o; return Objects.equals(this.id, user.id) Objects.equals(this.name, user.name) Objects.equals(this.email, user.email) Objects.equals(this.createdAt, user.createdAt); } Override public int hashCode() { return Objects.hash(id, name, email, createdAt); } Override public String toString() { StringBuilder sb new StringBuilder(); sb.append(class User {\n); sb.append( id: ).append(toIndentedString(id)).append(\n); sb.append( name: ).append(toIndentedString(name)).append(\n); sb.append( email: ).append(toIndentedString(email)).append(\n); sb.append( createdAt: ).append(toIndentedString(createdAt)).append(\n); sb.append(}); return sb.toString(); } private String toIndentedString(Object o) { if (o null) { return null; } return o.toString().replace(\n, \n ); } }7. 使用生成的 Java 客户端调用 API生成代码后我们可以直接在业务代码中调用生成的客户端。下面是一个简单的调用示例import com.example.client.ApiClient; import com.example.client.api.UsersApi; import com.example.client.model.User; import java.util.List; public class UserClientDemo { public static void main(String[] args) { // 初始化 API 客户端设置服务端地址 ApiClient apiClient new ApiClient(); apiClient.setBasePath(http://localhost:8080); // 创建 API 实例 UsersApi usersApi new UsersApi(apiClient); try { // 调用获取用户列表接口 Listamp;lt;Useramp;gt; users usersApi.getUsers(1, 20); System.out.println(获取到 users.size() 个用户); for (User user : users) { System.out.println(用户 ID: user.getId() , 姓名: user.getName()); } // 调用创建用户接口 User newUser new User(); newUser.setName(张三); newUser.setEmail(zhangsanexample.com); User created usersApi.createUser(newUser); System.out.println(创建成功新用户 ID: created.getId()); // 调用根据 ID 查询用户接口 User fetched usersApi.getUserById(created.getId()); System.out.println(查询到用户: fetched.getName()); } catch (Exception e) { e.printStackTrace(); } } }8. 使用 Maven 插件集成到构建流程在实际项目中我们通常希望代码生成与构建流程集成避免手动执行命令行。下面演示如何在 Maven 项目中配置 swagger-codegen-maven-plugin。8.1 配置插件build plugins plugin groupIdio.swagger.codegen.v3/groupId artifactIdswagger-codegen-maven-plugin/artifactId version3.0.46/version executions execution idgenerate-client/id goals goalgenerate/goal /goals configuration inputSpec${project.basedir}/src/main/resources/api.yaml/inputSpec languagejava/language libraryokhttp-gson/library output${project.build.directory}/generated-sources/swagger/output configOptions groupIdcom.example/groupId artifactIduser-client/artifactId artifactVersion1.0.0/artifactVersion dateLibraryjava8/dateLibrary /configOptions /configuration /execution /executions /plugin /plugins /build8.2 添加 build-helper-maven-plugin 将生成代码加入编译路径plugin groupIdorg.codehaus.mojo/groupId artifactIdbuild-helper-maven-plugin/artifactId version3.3.0/version executions execution idadd-source/id phasegenerate-sources/phase goals goaladd-source/goal /goals configuration sources source${project.build.directory}/generated-sources/swagger/src/main/java/source /sources /configuration /execution /executions /plugin8.3 执行构建mvn clean compile执行后Maven 会先读取api.yaml生成客户端代码再将其编译进项目开发者可以直接在业务代码中引用生成的类。9. 自定义代码生成模板Swagger Codegen 允许通过自定义模板来调整生成代码的风格。首先将默认模板导出到本地java -jar swagger-codegen-cli.jar meta \ -o ./my-template \ -n myTemplate \ -p com.example.codegen该命令会生成一个模板工程其中包含src/main/resources目录下的模板文件。我们可以修改model.mustache等模板文件然后通过-t参数指定自定义模板目录java -jar swagger-codegen-cli.jar generate \ -i api.yaml \ -l java \ -o ./generated/custom-client \ -t ./my-template/src/main/resources10. 常见问题与注意事项版本兼容性Swagger Codegen 2.x 与 3.x 的配置参数存在差异使用前务必确认规范文件版本与工具版本匹配。operationId 唯一性OpenAPI 规范中的operationId必须唯一否则生成的代码会出现方法名冲突。枚举类型处理规范中的枚举值在生成代码时会映射为对应语言的枚举类型注意保持枚举值命名规范。日期时间格式建议在规范中明确format: date-time并通过dateLibrary配置项指定目标语言的日期库。生成代码的维护生成代码通常不应手动修改如需定制应通过修改模板或配置项实现避免重新生成时丢失改动。11. 总结Swagger Codegen 是连接 API 规范与多语言代码实现的重要桥梁。通过本文的实战演示我们掌握了从 OpenAPI 规范文件生成 Java、Python、TypeScript 客户端以及 Spring Boot 服务端代码的完整流程并了解了如何通过 Maven 插件将代码生成集成到自动化构建中。在实际项目中建议团队将 OpenAPI 规范文件作为接口契约的唯一事实来源配合 Swagger Codegen 或 OpenAPI Generator 实现代码的自动化生成从而有效保证前后端接口的一致性提升整体研发效率。

相关新闻

2.8万亿参数本地跑起来是什么体验?Kimi K3开源权重部署与性能调优实录

2.8万亿参数本地跑起来是什么体验?Kimi K3开源权重部署与性能调优实录

文章目录每日一句正能量摘要一、前言:开源了,但你大概率跑不动二、硬件门槛:从百万美元到8GB内存2.1 权重体积的真相2.2 官方验证硬件2.3 8GB内存的极限测试三、部署路线:四条路,选对不选贵3.1 路线一:vLLM…

2026/8/15 22:26:25 阅读更多 →
开源工具实现AI智能体免费网络访问:原理、集成与实战指南

开源工具实现AI智能体免费网络访问:原理、集成与实战指南

1. 项目概述:一个让AI智能体“免费上网”的开源工具最近在GitHub上闲逛,发现一个挺有意思的项目,开源才两天,Star数就冲到了1.1K。这个项目的核心卖点非常直接:一句话,就能让你的AI智能体(Agent…

2026/8/15 22:26:25 阅读更多 →
Windows CMD FOR命令深度解析:从基础循环到自动化脚本引擎

Windows CMD FOR命令深度解析:从基础循环到自动化脚本引擎

1. 从一次“清理C盘”的翻车经历说起那天下午,我的电脑C盘又亮起了刺眼的红色警告。作为一个常年和各种文件、开发环境打交道的“数字仓鼠”,这几乎是每月一次的例行公事。我熟练地按下Win R,输入cmd,准备用我珍藏的“清理C盘垃圾…

2026/8/15 22:26:25 阅读更多 →

最新新闻

Python seek:一针见血定位文件,别再傻傻从头读了

Python seek:一针见血定位文件,别再傻傻从头读了

于文件操作之际, seek()方法乃是一个能高效定位文件指针的核心工具, 它可让开发者精准把控读写位置, 特别适用于大文件处理、日志分析等这类需要随机访问的场景。本文会从基础语法、参数详解、典型应用场景以及注意事项这四个方面予以展开说明。一、基础语法与参数解析seek()方…

2026/8/15 23:06:39 阅读更多 →
Hermes Agent 的系统要求是什么?

Hermes Agent 的系统要求是什么?

关键前提**:Hermes Agent 的硬件要求取决于你用哪种模型接入方式——是调用云端 API(轻量)还是在本地跑大模型(重量级),两者差距巨大。一、两种部署模式的硬件要求 模式 A:调用云端 API&#xf…

2026/8/15 23:06:39 阅读更多 →
Hermes Agent 与 CrewAI 的区别是什么?

Hermes Agent 与 CrewAI 的区别是什么?

Hermes Agent vs CrewAI 详细对比 核心结论(一句话) CrewAI 是"多 Agent 协作编排框架"——你定义一组角色,分配任务,它们协同完成;Hermes Agent 是"单 Agent 自进化系统"——一个持久运行的 Agen…

2026/8/15 23:06:39 阅读更多 →
2030年算力能耗预测:8000亿度电背后的技术挑战与绿色算力实践

2030年算力能耗预测:8000亿度电背后的技术挑战与绿色算力实践

这次我们来看一个关于未来算力与能源消耗的预测:到2030年,全国算力用电量预计将达到8000亿千瓦时。这个数字背后,是近6万亿度的绿电需求将涌入电网。这不仅仅是能源消耗的预测,更是对数据中心、AI算力、云计算基础设施乃至整个数字…

2026/8/15 23:06:39 阅读更多 →
电子商务专业毕业论文一键生成⚡这6个AI工具实测很好用

电子商务专业毕业论文一键生成⚡这6个AI工具实测很好用

电子商务专业的毕业论文,卡住的人比想象的要多。你说它偏管理吧,导师让你跑结构方程模型;你说它偏技术吧,又得大量引用消费者行为理论和营销模型。TAM模型怎么套、UTAUT量表从哪来、SPSS跑出来不显著怎么办、直播电商的数据怎么收…

2026/8/15 23:06:39 阅读更多 →
Python自动化监控网页更新并发送提醒

Python自动化监控网页更新并发送提醒

在跟进行业动态之际, 是不是老是忧心会错过关键的网页更新, 像竞争对手官网呈现新品发布的页面, 合作方政策调整所涉及的通知页面, 每日通过手动方式去刷新并查看着实耗费时间, 倘若有所遗漏便极有可能对业务决策造成影响。千万别让信息滞后致使工作节奏被拖缓, 它能够助力你自…

2026/8/15 23:05:38 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/15 12:59:14 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →