Java
mustache
swagger
swagger-codegen

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時点)