You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:08:26