🐳
swagger-codegen-cliで生成したコードが好みでなかったときの対処法
困ったこと
外部サービスが提供しているSwagger Specでjava-clientのコードをswagger-codegen-cliで生成して使っていました。
swagger-codegen-cliのバージョンを上げて再作成したところ、BooleanのgetterがgetXXX
ではなくisXXX
に変わってしまいました。
状況
- swagger-codegen-cliのv2.2.3を以前使ったが、新しいSwagger Specでは正しく生成できない。(ビルドエラーになる)
- v2.2.3 -> v2.3.1に変更(current stable)
テンプレートをカスタマイズ
実行する際に-t
をつける
# 例
# -t: templateがあるフォルダを指定. templateに存在するテンプレートファイルを優先して作成してくれる
java -jar swagger-codegen-cli.jar generate -l java -t ./template -o swagger-java-client
元々のテンプレートファイルの場所はgithubのswagger-codegen/modules/swagger-codegen/src/main/resources/Java/
にあります
今回上書きしたいテンプレートファイルはpojo.mustacheです。getter部分の箇所を見ると
public {{{datatypeWithEnum}}} {{#isBoolean}}is{{/isBoolean}}{{getter}}() {
return {{name}};
}
{{^isReadOnly}}
となっている場所があるので、次のように直します
{{#isBoolean}}
public {{{datatypeWithEnum}}} get{{getter}}() {
return {{name}};
}
{{/isBoolean}}
{{! Boolean以外はgetを書かなくてもgetが設定される }}
{{^isBoolean}}
public {{{datatypeWithEnum}}} {{getter}}() {
return {{name}};
}
{{/isBoolean}}
{{^isReadOnly}}
まとめ
今回は生成したコードでは困るので、テンプレートを上書きするようにしました。
同様に自分の好みにカスタマイズすることも可能です。
補足
v2.3.1ではテンプレートファイルで上書きするしかありませんが、次のバージョンでconfigでBooleanのprefixが決められるようになるかもしれません。(2018/04/13時点)
Discussion