Swagger2.0定义含空字符串枚举,codegen生成Java枚举异常是规范还是工具问题?
这个问题的核心诱因是 swagger-codegen v2.2.1版本的固有缺陷,你的枚举定义本身符合规范,也不存在配置遗漏。
各环节排查结论
- 规范定义环节:你定义的包含空字符串的string类型枚举完全符合JSON Schema规范。枚举允许任意符合字段类型约束的合法值,空字符串属于合法的string类型取值,因此定义环节没有问题。
- 工具环节:swagger-codegen 2.2.x及更早版本的Java代码生成逻辑存在已知bug,生成枚举类时会直接把枚举值作为Java枚举常量名,而空字符串不属于合法的Java标识符,就会触发你遇到的无效枚举、空键无对应值的问题。该bug在2.3.0及之后的版本已经得到修复。
- 配置环节:v2.2.1版本没有内置的配置参数可以规避这个问题,如果暂时无法升级工具版本,可以通过两个临时方案解决:
- 在swagger.json的枚举定义中增加
x-enum-varnames扩展字段,给空字符串指定合法的枚举常量名,示例如下:
"SomeType": { "type": "string", "enum": [ "", "TYPE1", "TYPE2", "TYPE3" ], "x-enum-varnames": ["EMPTY", "TYPE1", "TYPE2", "TYPE3"] },- 代码生成完成后手动修正枚举类的定义。
- 在swagger.json的枚举定义中增加
内容的提问来源于stack exchange,提问作者Dzmitry Shalukhau
相关产品推荐
相关产品推荐

