openapi-generator将ReadOnly重命名为VarReadOnly,如何阻止该行为?
解决openapi-generator v7中ReadOnly属性被自动重命名的问题
问题背景
我们把openapi-generator升级到v7版本(要求JRE 11/类版本55,之前用的是JRE 8/类版本52)后,生成API客户端代码时,所有叫ReadOnly的属性都被自动改成了VarReadOnly,这给现有代码带来了一堆兼容问题。之前试过在CLI命令里加--reserved-words-mappings readonly=readonly,但完全没效果。
实际可行的解决办法
1. 修正保留字映射的大小写匹配
你的属性名是**ReadOnly**(首字母大写),但配置的是小写的readonly=readonly——openapi-generator的保留字映射是区分大小写的。直接把参数改成对应大小写试试:
--reserved-words-mappings ReadOnly=ReadOnly
2. 改用配置文件替代CLI参数
有时候CLI参数的优先级或者解析逻辑会导致映射不生效,换成config.yaml配置文件更可靠:
reservedWordsMappings: ReadOnly: ReadOnly
然后在生成命令里指定这个配置文件:
openapi-generator generate -g [你的目标语言,比如java/python] -i your-api-spec.yaml -o ./output -c config.yaml
3. 针对目标语言的内置规则调整
不同语言的生成器有自己的内置保留字列表,v7可能把ReadOnly加到了你用的语言的保留字里。以Java为例,可以通过额外参数明确排除它:
--additional-properties reservedWords=ReadOnly
或者在配置文件里写:
additionalProperties: reservedWords: ReadOnly
4. 用OpenAPI扩展强制指定属性名(应急方案)
如果上面的方法都不行,直接在你的OpenAPI文档里给ReadOnly属性加x-codegen-name扩展,硬指定生成后的名字:
components: schemas: YourTargetSchema: properties: ReadOnly: type: string x-codegen-name: ReadOnly
5. 检查版本bug
v7刚出来可能有一些小bug,建议升级到v7的最新补丁版本,或者去官方仓库看看有没有人提过同样的问题,说不定已经有修复了。
内容的提问来源于stack exchange,提问作者dddave
相关产品推荐
相关产品推荐

