Springdoc为何未将Kotlin `String?`转换为OpenAPI的`nullable: true`?
为什么Springdoc没有将Kotlin可空属性转换为OpenAPI的
nullable: true? 你遇到的情况是Springdoc默认行为导致的——它并不会自动把Kotlin的可空类型(带?的属性)映射为OpenAPI规范里的nullable: true,哪怕OpenAPI 3.0.1明确定义了这个字段用来标识是否允许null值。
比如你给出的示例代码:
class DemoRequest ( @field:Schema val noRequiredNullableNoDefault: String? )
生成的OpenAPI文档里并没有带上nullable: true,这是因为Springdoc默认不会解析Kotlin的可空修饰符来自动设置这个属性。
解决办法有两种:
1. 显式通过@Schema注解指定
直接在属性的@Schema注解里加上nullable = true参数,强制声明该字段允许为null:
class DemoRequest ( @field:Schema(nullable = true) val noRequiredNullableNoDefault: String? )
2. 开启Springdoc的Kotlin可空属性自动识别
如果不想每个可空属性都手动加注解,可以在Spring Boot配置文件里开启自动转换开关:
- YAML格式(application.yml):
springdoc: model-converters: kotlin-nullable-properties: true
- Properties格式(application.properties):
springdoc.model-converters.kotlin-nullable-properties=true
开启这个配置后,Springdoc会自动识别Kotlin中带?的可空属性,将它们的OpenAPI schema设置为nullable: true。
注意:这个自动转换功能需要springdoc-openapi-kotlin依赖版本在1.6.0及以上,如果你的项目依赖版本过低,需要先升级对应的依赖包。
内容的提问来源于stack exchange,提问作者lathspell
相关产品推荐
相关产品推荐

