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
相关产品推荐
相关产品推荐

