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

openapi-generator-maven-plugin生成Java类未用继承却复制基类属性的问题

OpenAPI Generator生成Java类时未生成继承关系的问题解决

问题场景

使用OpenAPI Generator Maven插件(版本7.7.0)从OpenAPI 3.0.1 YAML文件生成Spring Boot 3的Java模型类时,DeleteMePO类未继承BasePO,而是直接复制了BasePO的所有属性(如id字段),不符合期望的继承结构。

问题原因

OpenAPI Generator的Spring代码生成器默认会将allOf组合的Schema展开为属性复制,而非类继承关系,这是默认配置导致的行为。

解决方法

在Maven插件的configOptions中添加<inheritanceType>inherit</inheritanceType>配置,强制生成器将allOf引用转换为Java类的继承关系。

修改后的插件配置如下:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>7.7.0</version>
    <configuration>
        <generatorName>spring</generatorName>
        <configOptions>
           <sourceFolder>src/gen/java</sourceFolder>
           <interfaceOnly>true</interfaceOnly>
           <skipDefaultInterface>true</skipDefaultInterface>
           <useJakartaEe>true</useJakartaEe>
           <useBeanValidation>false</useBeanValidation>
           <performBeanValidation>false</performBeanValidation>
           <openApiNullable>false</openApiNullable>
           <booleanGetterPrefix>is</booleanGetterPrefix>
           <useSpringBoot3>true</useSpringBoot3>
           <!-- 新增配置,强制生成继承关系 -->
           <inheritanceType>inherit</inheritanceType>
        </configOptions>
        <modelPackage>my.package.model</modelPackage>
        <apiPackage>my.package.api</apiPackage>
        <output>${project.basedir}</output>
        <generateApiDocumentation>false</generateApiDocumentation>
        <generateModelDocumentation>false</generateModelDocumentation>
        <generateSupportingFiles>false</generateSupportingFiles>
        <generateApiTests>false</generateApiTests>
        <generateModelTests>false</generateModelTests>
    </configuration>
    <executions>
        <execution>
            <id>generate-testdeleteme</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/openapi/testdeleteme-api-def-single.yaml</inputSpec>
            </configuration>
        </execution>
    </executions>
</plugin>

效果验证

添加该配置后重新执行生成命令,DeleteMePO类会正确继承BasePO,生成代码示例:

@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "...", comments = "Generator version: 7.7.0")
public class DeleteMePO extends BasePO {

  private String address;
  // 省略getter/setter等方法
}

内容的提问来源于stack exchange,提问作者makozaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:36:12