Swagger Codegen 代码生成器配置
除了创建或修改模板之外,自定义代码生成器还有不同的方面。每种语言都有一个支持配置文件来处理不同的类型映射等
1$ ls -1 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/2AbstractJavaJAXRSServerCodegen.java3AbstractTypeScriptClientCodegen.java4... (results omitted)5TypeScriptAngularClientCodegen.java6TypeScriptNodeClientCodegen.java
这些文件中的每一个都会创建合理的默认值,以便您可以快速运行。但是,如果您想要配置包名、前缀、模型文件夹等,您可以使用 json 配置文件来传递这些值。
1java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \2 -i https://petstore.swagger.io/v2/swagger.json \3 -l java \4 -o samples/client/petstore/java \5 -c path/to/config.json
并且 config.json
包含以下示例
1{2 "apiPackage" : "petstore"3}
每种语言支持的配置选项可能不同。运行 config-help -l {lang}
将显示可用选项。这些选项通过配置文件(例如 config.json)或通过使用 java -jar swagger-codegen-cli.jar -D{optionName}={optionValue}
传递它们来应用。
如果
-D{optionName}
不起作用,请打开一个 工单,我们将对此进行调查。
1java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar config-help -l java
输出
1CONFIG OPTIONS2modelPackage3 package for generated models4
5apiPackage6 package for generated api classes7...... (results omitted)8library9 library template (sub-template) to use:10 jersey1 - HTTP client: Jersey client 1.18. JSON processing: Jackson 2.4.211 jersey2 - HTTP client: Jersey client 2.612 feign - HTTP client: Netflix Feign 8.1.1. JSON processing: Jackson 2.6.313 okhttp-gson (default) - HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.114 retrofit - HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.1 (Retrofit 1.9.0)15 retrofit2 - HTTP client: OkHttp 2.5.0. JSON processing: Gson 2.4 (Retrofit 2.0.0-beta2)16 google-api-client - HTTP client: google-api-client 1.23.0. JSON processing: Jackson 2.8.917 rest-assured - HTTP client: rest-assured : 3.1.0. JSON processing: Gson 2.6.1. Only for Java8
您的 Java 配置文件可以如下所示
1{2 "groupId": "com.my.company",3 "artifactId": "MyClient",4 "artifactVersion": "1.2.0",5 "library": "feign"6}
对于所有未指定的选项,将使用默认值。
覆盖默认选项的另一种方法是扩展特定语言的配置类。例如,要更改 Objective-C 生成文件的前缀,只需子类化 ObjcClientCodegen.java
1package com.mycompany.swagger.codegen;2
3import io.swagger.codegen.languages.*;4
5public class MyObjcCodegen extends ObjcClientCodegen {6 static {7 PREFIX = "HELO";8 }9}
并在运行生成器时指定 classname
1-l com.mycompany.swagger.codegen.MyObjcCodegen
现在将加载您的子类并覆盖超类中的 PREFIX
值。
引入您自己的模型
有时您不希望生成模型。在这种情况下,您可以简单地指定一个导入映射来告诉代码生成器不要创建什么。执行此操作时,引用特定模型的每个位置都将引用回您的类。请注意,这可能不适用于所有语言...
要指定导入映射,请使用 --import-mappings
参数,并指定模型到导入逻辑,如下所示
1--import-mappings Pet=my.models.MyPet
或用于多个映射
1--import-mappings Pet=my.models.MyPet,Order=my.models.MyOrder
或
1--import-mappings Pet=my.models.MyPet --import-mappings Order=my.models.MyOrder