Swagger CodeGen基于枚举生成子类型时出现类型转换错误
Swagger CodeGen枚举类型转换错误解决方案
检查Swagger定义的枚举与鉴别器配置
确保Swagger规格文件中,importType字段明确标记为枚举类型,且鉴别器与该字段正确关联。示例YAML配置:FileImportInput: type: object discriminator: propertyName: importType properties: importType: type: string enum: - MRI - OTHER_IMPORT_TYPE required: - importType避免将鉴别器字段定义为普通字符串,否则CodeGen会默认用字符串值赋值,而非枚举类型。
调整Swagger CodeGen Maven插件参数
在插件配置中添加枚举映射相关参数,强制生成正确的类型转换逻辑:<plugin> <groupId>io.swagger.codegen.v3</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <version>3.0.34</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec> <language>java</language> <configOptions> <discriminatorUseEnumMapping>true</discriminatorUseEnumMapping> <enumPropertyNaming>UPPERCASE</enumPropertyNaming> </configOptions> </configuration> </execution> </executions> </plugin> 核心参数`discriminatorUseEnumMapping`会让CodeGen将鉴别器值自动映射为对应枚举实例,而非直接传入字符串。验证子类的鉴别器映射匹配度
确保子类MriImportRequest在Swagger定义中的鉴别器映射值与枚举值完全一致:MriImportRequest: allOf: - $ref: '#/components/schemas/FileImportInput' - type: object properties: mriUniqueField: type: string discriminator: mapping: MRI: '#/components/schemas/MriImportRequest'这里的
MRI必须和FileImportInput枚举列表中的值完全匹配,大小写也要一致。临时修复(不推荐)
如果上述配置调整后仍未解决问题,可临时修改生成的FileImportInput构造函数,手动完成字符串到枚举的转换:public FileImportInput(String importType) { this.importType = ImportTypeEnum.fromValue(importType); }注意:该方法会在重新生成代码时被覆盖,仅作为应急方案。
内容的提问来源于stack exchange,提问作者user3897533
相关产品推荐
相关产品推荐

