OpenAPIでenumをnullableにしたい
OpenAPIではenumはデフォルトでnullableにならない。次のようにする。
https://swagger.io/docs/specification/data-models/enums/
Nullable enums
A nullable enum can be defined as follows:
type: string
nullable: true # <---
enum:
- asc
- desc
- null # <--- without quotes, i.e. null not "null"
↑はv3の話で、v2はenumをnullableにできないっぽい?
swaggerの仕様の確認にOpenAPISpecのrepositoryのjsonschemaを信用しない方が良い - Qiita
OAS2.0(swagger spec)において、nullを許可する値の指定を行う方法は用意されていない
OpenAPI GeneratorでRubyのコードを自動生成する時、enumにnilが入るとエラーになるようなコードになっちゃっててどうしたもんか。自分で書き換えてメンテ?
OpenAPI Generatorは"x-nullable": trueに対応してくれていた。これを足して再度openapi-generator generateすると
code:somemodel.rb.diff
# List of attributes with nullable: true
def self.openapi_nullable
Set.new([
+ :'my_nullable_prop'
])
end
となる。
けど、なんかだめだった。属性ライターが
code:somemodel.rb
def my_nullable_prop=(my_nullable_prop)
validator = EnumAttributeValidator.new('String', "value1", "value2")
unless validator.valid?(my_nullable_prop)
fail ArgumentError, "invalid value for \"my_nullable_prop\", must be one of {validator.allowable_values}."
end
end
のままで、openapi_nullableをチェックしていない。
to_hashの方ではチェックしてるんだけどね。
これはOpenAPI Generatorにパッチ書くのがいいかなあ
と思ったら、単にレスポンスがnullじゃなくて空文字列なのが悪かった。酷い。