提问者:小点点

OpenAPI生成器maven插件不使用导入映射


我正在为spring-boot应用程序编写规范,以便使用openapi生成器maven插件为客户端生成API。我想导入一些模型,所以我试着像往常一样导入它们,使用schemaMappings属性,就像我使用openapi生成器gradle插件一样。在yaml规范中,我创建了我想要导入的模型的空模式,并在pom.xml的插件设置中指定了所需的类型。我的插件设置:

         <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <version>6.4.0</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.basedir}/src/main/resources/openapi/some-api.yaml</inputSpec>
                        <generatorName>spring</generatorName>
                        <output>${project.build.directory}/generated-sources/openapi</output>
                        <generateApiTests>false</generateApiTests>
                        <generateModelTests>false</generateModelTests>
                        <generateModelTests>false</generateModelTests>
                        <generateModelDocumentation>false</generateModelDocumentation>
                        <importMappings>
                            <importMapping>MyDto1=com.some.project.metric.MyDto1</importMapping>
                            <importMapping>MyDto2=com.some.project.metric.MyDto2</importMapping>
                        </importMappings>
                        <configOptions>
                            <title>Some project</title>
                            <library>spring-boot</library>
                            <useTags>true</useTags>
                            <dateLibrary>java8</dateLibrary>
                            <basePackage>${default.package}</basePackage>
                            <apiPackage>${default.package}.api</apiPackage>
                            <modelPackage>${default.package}.model</modelPackage>
                            <performBeanValidation>true</performBeanValidation>
                            <interfaceOnly>true</interfaceOnly>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但是突然间我发现,由于某种原因,openapi-generator-maven-plugin与openapi-generator-gradle-plugin不同,不使用importMappings属性。它存在于插件的代码中,您可以在生成器的配置或配置选项中使用它,但最终它不适用于我自己的 DTO。又检查了一次。在gradle中一切正常,但在Maven中则不然。它不会生成 POJO,因为它是一个自由格式的对象,只是用对象类型替换它们。我开始深入研究这个问题,一段时间后,我发现这个问题存在了很长时间。至少从版本 5.3.1 开始。你可以在这里


共1个答案

匿名用户

我在这个问题上花了很多时间,所以也许在这里发布它会很有用。解决方案是在 configOptions 中使用 schemaMappings,而不是 importMappings。诸如此类:

                <configuration>
                    <inputSpec>${project.basedir}/src/main/resources/openapi/some-api.yaml</inputSpec>
                    <generatorName>spring</generatorName>
                    <output>${project.build.directory}/generated-sources/openapi</output>
                    <generateApiTests>false</generateApiTests>
                    <generateModelTests>false</generateModelTests>
                    <generateModelTests>false</generateModelTests>
                    <generateModelDocumentation>false</generateModelDocumentation>
                    <configOptions>
                        <title>Some project</title>
                        <library>spring-boot</library>
                        <useTags>true</useTags>
                        <dateLibrary>java8</dateLibrary>
                        <basePackage>${default.package}</basePackage>
                        <apiPackage>${default.package}.api</apiPackage>
                        <modelPackage>${default.package}.model</modelPackage>
                        <performBeanValidation>true</performBeanValidation>
                        <interfaceOnly>true</interfaceOnly>
                        <schemaMappings>MyDto1=com.some.project.metric.MyDto1,MyDto2=com.some.project.metric.MyDto2</schemaMappings>
                    </configOptions>
                </configuration>

如果您也提供您的建议,我将很高兴。