LoginSignup
1
0

More than 3 years have passed since last update.

openapi-generator で生成された Kotlinコードの Enumでコンパイルエラーが発生したとき

Last updated at Posted at 2020-10-27

概要

openapi-generator でデフォルトの設定のままKotlinコードを生成すると、
生成されたコードでコンパイルエラーが発生する場合があります。

そのようなときは、enumPropertyNaming プロパティの設定を変更するというのが解決策のひとつです。

詳細

デフォルトの設定だとコンパイルエラーになる文字列がある

以下のようなスキーマを考えます。
role というフィールドを User Operator Admin の3つのEnumで定義しています。
のちに、この Operator が悪さをします。

  role:
    type: string
    enum:
      - User
      - Operator
      - Admin

上記のスキーマから openapi-generator を使って Kotlin のコードに変換すると、以下のコードが生成されます。
しかし、operator は Kotlin の予約語のため、このコードはコンパイルエラーになってしまいます。

    enum class Role(val value: kotlin.String) {

        @JsonProperty("User") user("User"),

        @JsonProperty("Operator") operator("Operator"), // ← operator は予約語

        @JsonProperty("Admin") admin("Admin");

    }

どう対応するか?

対応の1つのアイディアとして、Enumが小文字で operator と出力されてしまうのがいけないという考えのもと、
大文字で OPERATOR と出力するように openapi-generator の enumPropertyNaming プロパティを変えることが挙げられます。

enumPropertyNaming に設定できる値は以下のいずれかです。1

  • camelCase (default)
  • PascalCase
  • snake_case
  • UPPERCASE
  • original

Kotlinの公式ドキュメント2を見ると、Enumは upper case で書かれているため、
自分のケースでは、 enumPropertyNaming=UPPERCASE で対応しました。

そうすると以下のようなコードが生成されます。コンパイルエラーは出ません。

    enum class Role(val value: kotlin.String) {

        @JsonProperty("User") USER("User"),

        @JsonProperty("Operator") OPERATOR("Operator"),

        @JsonProperty("Admin") ADMIN("Admin");

    }

深入り希望者へのリンク

事態を詳しく調べたい方に役に立ちそうなリンクを貼っておきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0