使用含oneOf属性的Swagger生成Spring可用模型的解决方案咨询
缺失的配置补充
你当前的配置只关闭了旧版判别器逻辑,缺少oneOf多态模型生成的核心开关,把spring-config.json的内容替换为以下配置即可:
{ "legacyDiscriminatorBehavior": false, "interfaceModel": true, "oneOfInterface": true, "jackson": true }
各配置项作用:
interfaceModel:开启接口形式的模型基类生成,适配多态场景oneOfInterface:专门针对oneOf属性触发接口生成逻辑,所有oneOf包含的子模型会自动实现该公共接口jackson:自动生成Jackson多态序列化注解,适配Spring默认的JSON序列化/反序列化规则
更简单的替代方案
如果调整配置后仍无法符合预期,可选择两种更易用的方案:
- 生成器替换为
spring-boot类型,该生成器针对Spring Boot场景做了专门适配,oneOf支持逻辑更成熟,修改生成命令即可:
java -jar .\openapi-generator-cli.jar generate -i ./swagger.json -o ./spring-gen -g spring-boot -c .\spring-config.json
- 放弃代码生成工具,直接使用SpringDoc的原生注解实现oneOf逻辑,在模型类上添加
@Schema(oneOf = {子模型1.class, 子模型2.class}),配合Jackson多态注解即可实现相同效果,灵活度更高、不需要额外工具依赖。
内容的提问来源于stack exchange,提问作者Gregor Sklorz
相关产品推荐
相关产品推荐

