我正在为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 开始。你可以在这里
我在这个问题上花了很多时间,所以也许在这里发布它会很有用。解决方案是在 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>
如果您也提供您的建议,我将很高兴。