如何让Swagger Codegen排除指定操作/HTTP请求方法?
解决Swagger Codegen生成不必要OPTIONS方法的问题
我之前在配合AWS API Gateway做CORS支持时,也碰到过一模一样的问题——手动添加的OPTIONS预请求方法被Codegen生成了没用的服务代码,完全不符合需求。这里分享几个我亲测有效的解决办法:
方法1:使用--exclude-operations命令行参数
这是最直接的方式,先给Swagger里所有的OPTIONS方法设置唯一的operationId,然后在生成代码时指定排除这些ID:
步骤1:给OPTIONS方法添加operationId
在你的Swagger YAML/JSON文件里,给每个OPTIONS接口加上明确的operationId:
paths: /: options: operationId: optionsCorsRoot responses: 200: description: CORS预请求响应 headers: Access-Control-Allow-Origin: { type: string } Access-Control-Allow-Methods: { type: string } Access-Control-Allow-Headers: { type: string } /users: options: operationId: optionsCorsUsers responses: 200: description: CORS预请求响应 # 同上面的CORS头部配置
步骤2:生成代码时排除这些操作
执行Codegen命令时,用--exclude-operations参数列出要跳过的operationId:
swagger-codegen generate -i your-swagger-file.yaml -l typescript-angular --exclude-operations optionsCorsRoot,optionsCorsUsers
方法2:使用x-codegen-ignore自定义扩展
很多新版本的Swagger Codegen(2.4.0+)支持通过自定义扩展标记要忽略的接口,直接在OPTIONS方法里加这个字段即可,不用额外修改命令:
paths: /products: options: x-codegen-ignore: true responses: 200: description: CORS预请求响应 # CORS头部配置...
添加后,Codegen在生成时会自动跳过带这个标记的方法,非常省心。
方法3:通过配置文件批量排除
如果你的OPTIONS方法很多,或者想把配置固化下来,可以创建一个Codegen配置文件(比如swagger-config.json),在里面指定要排除的操作:
{ "excludeOperations": ["optionsCorsRoot", "optionsCorsUsers", "optionsCorsProducts"] }
然后生成时指定这个配置文件:
swagger-codegen generate -i your-swagger-file.yaml -l typescript-angular --config swagger-config.json
额外提示
如果你的AWS API Gateway还没完全配置好,其实也可以直接在AWS控制台开启CORS支持,API Gateway会自动帮你生成OPTIONS方法,不用手动在Swagger里写——不过如果是需要通过Swagger模板部署的话,手动添加OPTIONS还是必要的,这时候上面的方法就能帮你过滤掉不必要的代码生成。
内容的提问来源于stack exchange,提问作者user1543276
相关产品推荐
相关产品推荐

