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

springdoc-openapi生成OpenAPI定义无法识别Scala类属性如何解决

问题根因

springdoc-openapi的Schema解析逻辑完全依赖项目中Jackson序列化器的类结构识别能力。Scala编译生成的类(包括case class)不遵循标准JavaBean规范:

  • 不会自动生成符合JavaBean命名规则的getter/setter方法
  • 构造参数绑定、Scala内置类型(比如Option)的序列化逻辑需要专属扩展模块支持
    默认配置下Jackson没有适配Scala语法的能力,因此只能识别到类本身,无法解析出具体属性,和你观察到的现象完全一致。
修复步骤

1. 引入Jackson Scala模块依赖

根据项目使用的Scala大版本(2.12/2.13)、Spring Boot内置的Jackson版本引入对应依赖。你当前使用的springdoc-openapi-ui 1.6.9通常配套Spring Boot 2.7.x,内置Jackson版本为2.13.x,Maven配置参考如下(Scala 2.13版本):

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-scala_2.13</artifactId>
    <version>2.13.5</version>
</dependency>

如果项目用Scala 2.12,直接把artifactId里的2.13替换为2.12即可,注意Jackson模块版本必须和Spring Boot内置的Jackson版本完全对齐,避免出现版本冲突。

2. 注册Scala模块到Spring容器

新建配置类,将Jackson Scala模块注册为Spring Bean,Spring会自动将该模块注入到全局使用的ObjectMapper实例中,代码如下:

import com.fasterxml.jackson.module.scala.DefaultScalaModule
import org.springframework.context.annotation.{Bean, Configuration}

@Configuration
class JacksonConfig {
  @Bean
  def defaultScalaModule: DefaultScalaModule = new DefaultScalaModule()
}

3. (可选)兜底配置

完成前两步后绝大多数场景都能正常识别属性,如果仍有个别字段扫描异常,可以在application配置文件中补充如下配置,强制springdoc直接复用Jackson的序列化规则生成Schema:

springdoc:
  override-with-generic-parameter: false

同时确保Scala编译插件没有开启字段名裁剪、字节码混淆类的优化,case class待识别的属性不要用private修饰即可。

验证方式

重启项目后再次调用/v3/api-docs接口,就能看到OpenApiTest的Schema中正常带出a、b两个字符串类型的属性。

内容的提问来源于stack exchange,提问作者laladelolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:21:20