You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:09:57