概要
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");
}
深入り希望者へのリンク
事態を詳しく調べたい方に役に立ちそうなリンクを貼っておきます。