如何让Swagger Codegen生成适配Angular 5 HTTPClientModule的代码?
我刚好处理过类似的需求,完全可以让Swagger Codegen生成适配Angular 5和新版HttpClientModule的代码,还能帮你解决运行Codegen以及ESI Swagger生成失败的问题,一步步来:
一、先搞定本地运行Swagger Codegen的问题
你说连Codegen都运行不起来,大概率是版本或环境没选对。Angular 5对应的Swagger Codegen版本建议用2.3.1~2.4.0,后续版本对Angular的支持偏向更高版本,适配性不好。
1. 两种安装运行方式(选一个就行)
Maven方式(推荐,环境依赖更清晰)
先确保你装了Java 8+和Maven,然后在终端执行:mvn swagger-codegen:generate \ -DswaggerCodegen.version=2.3.1 \ -DinputSpec=https://esi.tech.ccp.is/latest/swagger.json \ -Dlanguage=angular5 \ -Doutput=./angular-esi-client重点注意这里的
-Dlanguage=angular5——Codegen 2.3+开始支持专门的angular5语言选项,会自动适配HttpClientModule,而不是旧的HttpModule。Jar包直接运行方式
下载对应版本的Jar包(比如2.3.1的Jar),然后执行:java -jar swagger-codegen-cli-2.3.1.jar generate \ -i https://esi.tech.ccp.is/latest/swagger.json \ -l angular5 \ -o ./angular-esi-client
2. 解决ESI Swagger在线生成失败的问题
你提到在线编辑器生成不了ESI的Swagger,大概率是这个Swagger文件里有一些非标准字段或扩展,本地运行时可以加参数跳过校验:
在上面的命令里加上--skip-validate-spec(Jar方式)或者-DskipValidateSpec=true(Maven方式)就行,比如Jar方式的完整命令:
java -jar swagger-codegen-cli-2.3.1.jar generate \ -i https://esi.tech.ccp.is/latest/swagger.json \ -l angular5 \ -o ./angular-esi-client \ --skip-validate-spec
二、验证生成的代码是否适配HttpClientModule
生成完成后,你可以检查这几个地方确认适配情况:
- 打开
api.module.ts,里面会导入HttpClientModule,而不是旧的HttpModule; - 查看任意一个API服务类(比如
CharactersApi.ts),会看到它注入的是HttpClient,而非Http:import { HttpClient, HttpParams } from '@angular/common/http'; @Injectable() export class CharactersApi { constructor(protected http: HttpClient) { } // 具体API方法都是用HttpClient的get/post等方法实现 }
三、按需精细调整生成配置
如果生成的代码有小细节需要调整(比如包路径、是否生成Injectable装饰器),可以用配置文件来控制:
创建一个swagger-codegen-config.json文件,内容如下:
{ "apiPackage": "app.esi.api", "modelPackage": "app.esi.models", "ngVersion": "5.0.0", "useHttpClient": true }
然后运行命令时加上-c swagger-codegen-config.json(Jar方式)或者-DconfigFile=swagger-codegen-config.json(Maven方式)即可。
四、常见坑点避坑指南
- Java版本问题:Codegen 2.x需要Java 8,用Java 11+可能会出现兼容性问题,建议切换到Java 8运行;
- Swagger Spec兼容性:如果跳过校验后还是报错,可以先把ESI的Swagger.json下载到本地,手动修正一些明显的格式问题(比如某些字段类型错误)再生成;
- 依赖版本匹配:生成的代码里的
package.json已经指定了Angular 5的依赖,安装时直接用npm install,不要随意升级Angular版本,否则会出现依赖冲突。
内容的提问来源于stack exchange,提问作者Alex Bailey

