OpenAPI Generator截断以SB_开头的枚举名称问题求助
解决OpenAPI Generator截断以“SB_”开头的枚举名称问题
以下是几种可行的解决办法,按推荐优先级排序:
1. 全局配置枚举命名策略
在生成代码时添加enumPropertyNaming参数,强制保留枚举值的原始名称,避免自动转换:
- 命令行方式:
openapi-generator generate -i openapi.yaml -g java --enum-property-naming original
- 配置文件方式(如
config.yaml):
enumPropertyNaming: original
生成时指定配置文件:
openapi-generator generate -i openapi.yaml -g java -c config.yaml
这个参数会让生成器直接使用枚举值的原始字符串作为类中的常量名,彻底解决前缀被截断的问题。
2. 在OpenAPI YAML中显式指定枚举常量名
如果不想修改全局配置,可以通过OpenAPI扩展字段x-enum-varnames为每个枚举值手动指定生成后的常量名:
components: schemas: YourEnumSchema: type: string enum: - SB_150_150 - SB_300_150 x-enum-varnames: - SB_150_150 - SB_300_150
生成的枚举类会严格遵循你指定的名称,不会做自动截断处理。
3. 自定义生成器模板
如果以上方法都不适用,可以修改对应语言的枚举模板,调整命名逻辑:
- 找到OpenAPI Generator的对应语言模板目录,比如Java模板路径为
modules/openapi-generator/src/main/resources/Java - 复制
enum.mustache模板到本地自定义目录 - 修改模板中处理枚举名称的部分,比如将原本的
{{{name}}}替换为原始枚举值{{{value}}}(具体语法根据模板引擎调整) - 生成代码时通过
--template-dir指定自定义模板目录:
openapi-generator generate -i openapi.yaml -g java --template-dir ./custom-templates
问题原因
OpenAPI Generator默认的命名转换逻辑会尝试将枚举值转换为符合目标语言代码规范的名称,可能误将SB_这类缩写前缀识别为需要剔除的冗余部分,导致名称被截断。通过上述方法强制保留原始名称或自定义命名规则即可解决。
内容的提问来源于stack exchange,提问作者fbnrbn
相关产品推荐
相关产品推荐

