コンテンツにスキップ

Swagger Codegen ジェネレーターの設定

コードジェネレーター(このバージョンではswagger codegen generator repoにあります)をカスタマイズするには、テンプレートを作成または変更する以外にもさまざまな側面があります。各言語には、異なる型マッピングなどを処理するためのサポート設定ファイルがあります。

ターミナルウィンドウ
1
s -1 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/
2
3
AbstractJavaCodegen.java
4
AbstractJavaJAXRSServerCodegen.java
5
... (results omitted)
6
JavaClientCodegen.java
7
JavaJAXRSSpecServerCodegen.java

これらのファイルはそれぞれ、すぐに実行できる合理的なデフォルトを作成します。パッケージ名、プレフィックス、モデルフォルダーなどを設定したい場合は、JSON 設定ファイルを使用して値を渡すことができます。

ターミナルウィンドウ
1
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
2
-i http://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) を介して、または -D{optionName}={optionValue} を指定して適用されます。

もし -D{optionName} が機能しない場合は、チケットをオープンしていただければ調査いたします。

ターミナルウィンドウ
1
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar config-help -l java

出力

1
CONFIG OPTIONS
2
modelPackage
3
package for generated models
4
5
apiPackage
6
package for generated api classes
7
...... (results omitted)
8
library
9
library template (sub-template) to use:
10
jersey1 - HTTP client: Jersey client 1.18. JSON processing: Jackson 2.4.2
11
jersey2 - HTTP client: Jersey client 2.6
12
feign - HTTP client: Netflix Feign 8.1.1. JSON processing: Jackson 2.6.3
13
okhttp-gson (default) - HTTP client: OkHttp 2.4.0. JSON processing: Gson 2.3.1
14
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.9

Java 用の設定ファイルは次のようになります。

1
{
2
"groupId":"com.my.company",
3
"artifactId":"MyClient",
4
"artifactVersion":"1.2.0",
5
"library":"feign"
6
}

指定されていないすべてのオプションにはデフォルト値が使用されます。

デフォルトオプションをオーバーライドする別の方法は、特定の言語の構成クラスを拡張することです。たとえば、Objective-C で生成されるファイルのプレフィックスを変更するには、ObjcClientCodegen.java を単純にサブクラス化します。

1
package com.mycompany.swagger.codegen;
2
3
import io.swagger.codegen.languages.*;
4
5
public class MyObjcCodegen extends ObjcClientCodegen {
6
static {
7
PREFIX = "HELO";
8
}
9
}

そして、ジェネレーターを実行する際に classname を指定します。

ターミナルウィンドウ
1
-l com.mycompany.swagger.codegen.MyObjcCodegen

これでサブクラスがロードされ、スーパークラスの PREFIX 値がオーバーライドされます。

独自のモデルを導入する

場合によっては、モデルを生成したくないことがあります。この場合、import マッピングを指定して、何を生成しないかをコード生成に伝えることができます。これを行うと、特定のモデルを参照するすべての場所が、ご自身のクラスを参照するようになります。

なお、これはすべての言語に当てはまらない場合があります!

インポートマッピングを指定するには、--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