OpenAPI Generator将属性"no"转为"false"的问题修复咨询
解决OpenAPI Generator生成Java类时"no"属性被转为"false"的问题
问题描述
我定义了包含no属性的OpenAPI YAML schema:
openapi: 3.0.3 info: title: NonAdult API version: 1.0.0 components: schemas: NonAdult: type: object properties: # 其他属性省略 no: type: string xml: name: NO xml: name: NON_ADULT
使用OpenAPI Generator Maven插件(5.1.1版本)生成Spring Boot模型类时,no属性被错误转换为false,生成的代码如下:
@JsonProperty("false") @JacksonXmlProperty(localName = "false") private String false;
需要保留原属性名以适配XML响应映射,不能修改no的属性名称。
原因分析
OpenAPI Generator的内部逻辑会将部分类似布尔字面量的字符串(如no)误识别为布尔值,自动转换为false,尤其在启用XML支持的场景下触发该问题。
解决方案
方法1:在OpenAPI YAML中添加代码生成扩展
在no属性中添加x-codegen-property-name扩展,强制生成器使用原属性名:
no: type: string xml: name: NO x-codegen-property-name: no
该扩展是OpenAPI Generator官方支持的自定义配置,用于指定生成代码时的属性名称,绕过自动转换逻辑。
方法2:修改Maven插件配置,添加保留字映射
在插件的configOptions中添加reservedWordsMappings配置,将no映射回原名称:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>5.1.1</version> <executions> <execution> <configuration> <configOptions> <!-- 其他原有配置保持不变 --> <reservedWordsMappings>no=no</reservedWordsMappings> </configOptions> <!-- 其他配置省略 --> </configuration> </execution> </executions> </plugin>
该配置会告知生成器,当遇到no这个被误判的名称时,直接使用原名称而非自动转换。
验证修改
执行mvn clean generate-sources重新生成代码,正确的输出应为:
@JsonProperty("no") @JacksonXmlProperty(localName = "NO") private String no;
内容的提问来源于stack exchange,提问作者it_ctw
相关产品推荐
相关产品推荐

