我使用swagger.io中的工具创建了一个Spring Boot服务器,现在将其移植到OpenAPITools。但是我找不到等效的生成器。我尝试将generaterName设置为spring,但是它创建了一个稍微不同的应用程序。首先,即使它不是MVC应用程序,它也使用WebMvcConfigurer Bean。其次,生成的Controller和API没有给我ObjectMapper。第三,它们给我提供了一个更加模糊的NativeWebRequest实例,而不是HttpServletRequest。 swagger.io上的spring REST生成器是否有匹配的生成器?我在做错什么吗?
这是我pom.xml文件中的openApiTools maven插件:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<!-- RELEASE_VERSION -->
<version>4.3.1</version>
<!-- /RELEASE_VERSION -->
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- Configuration properties taken from -->
<!-- https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator-maven-plugin/README.md -->
<inputSpec>${project.basedir}/src/gen/java/main/pizzeria.yaml</inputSpec>
<generatorName>spring</generatorName>
<!-- <output>${project.basedir}</output>-->
<!-- Defaults to ${project.build.directory}/generated-sources/openapi -->
<apiPackage>com.dummy.pizzeria.api</apiPackage>
<modelPackage>com.dummy.pizzeria.model</modelPackage>
<invokerPackage>com.dummy.pizzeria</invokerPackage>
<packageName>com.dummy.pizzeria.objects</packageName>
<groupId>neptunedreams</groupId>
<artifactId>pizzeria</artifactId>
<library>spring-boot</library>
<generateModelTests>false</generateModelTests>
<!--<generateSupportingFiles>false</generateSupportingFiles>-->
<configOptions>
<!-- configOptions are specific to the spring generator. These are taken from -->
<!-- https://github.com/OpenAPITools/openapi-generator/blob/master/docs/generators/spring.md -->
<sourceFolder>gen</sourceFolder>
<bigDecimalAsString>true</bigDecimalAsString>
<dateLibrary>java8</dateLibrary> <!-- Default-->
<performBeanValidation>true</performBeanValidation>
<useBeanValidation>true</useBeanValidation>
<skipDefaultInterface>true</skipDefaultInterface>
<library>spring-boot</library>
<interfaceOnly>false</interfaceOnly>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
答案 0 :(得分:0)
我知道您在发布此处的前一天,在我们的Slack频道上问了同样的问题,但是您从未回复我的回复,因此我在这里重复了它。
仅当您将库指定为spring-mvc时,Spring才应输出MVC文件。这些生成器的默认库为spring-boot
。我建议您检查pom和任何外部配置(通过configFile或maven属性指定),以查看配置是否有冲突。
您可以在我们的仓库中与this sample的配置文件进行比较。
我们support个库:
spring-mvc
spring-boot
spring-cloud
我确实运行了您上面发布的示例,并查看了spring boot输出。但是,我看到您没有定义输出目录(在示例中已将其注释掉),因此它只会生成到target/generated-sources
中。我假设您可能曾经尝试过spring-mvc
,然后开始意外地生成target
。
如果要生成为项目结构,则总是需要指定output
。例如,要写出到./my-springboot
,您需要添加:
<output>${project.basedir}/my-springboot</output>
这将按预期输出springboot代码:
➜ examples git:(master) ✗ tree my-springboot
my-springboot
├── README.md
├── pom.xml
└── src
└── main
├── java
│ ├── com
│ │ └── dummy
│ │ └── pizzeria
│ │ ├── OpenAPI2SpringBoot.java
│ │ ├── RFC3339DateFormat.java
│ │ ├── api
│ │ │ ├── ApiUtil.java
│ │ │ ├── PetApi.java
│ │ │ ├── PetApiController.java
│ │ │ ├── StoreApi.java
│ │ │ ├── StoreApiController.java
│ │ │ ├── UserApi.java
│ │ │ └── UserApiController.java
│ │ └── model
│ │ ├── Category.java
│ │ ├── ModelApiResponse.java
│ │ ├── Order.java
│ │ ├── Pet.java
│ │ ├── Tag.java
│ │ └── User.java
│ └── org
│ └── openapitools
│ └── configuration
│ ├── HomeController.java
│ └── OpenAPIDocumentationConfig.java
└── resources
└── application.properties
12 directories, 20 files
如果您想生成一个子模块,并且除了排除supportingFiles
之外,还需要一些复杂的逻辑,我提到这是因为您在示例中已对此进行了注释,您可以定义一个外部忽略文件。
假设您不想修改pom,属性,自述文件以及已创建(或计划)的任何实现文件…在您的项目根目录中创建一个名为my-springboot.ignore
的文件:
# This file works like .gitignore, patterns here won't be written or overwritten.
# Test files are never overwritten.
**/pom.xml
**/application.properties
**/README.md
**/*Impl.java
我还建议更新到生成器的5.0.0-beta2
版本。
这是我用来在本地测试的完整插件节点,包括上面的所有建议。
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.0.0-beta2</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<ignoreFileOverride>${project.basedir}/my-springboot.ignores</ignoreFileOverride>
<inputSpec>${project.basedir}/openapi.yaml</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>com.dummy.pizzeria.api</apiPackage>
<modelPackage>com.dummy.pizzeria.model</modelPackage>
<invokerPackage>com.dummy.pizzeria</invokerPackage>
<packageName>com.dummy.pizzeria.objects</packageName>
<groupId>neptunedreams</groupId>
<artifactId>pizzeria</artifactId>
<library>spring-boot</library>
<generateModelTests>false</generateModelTests>
<output>${project.basedir}/my-springboot</output>
<configOptions>
<bigDecimalAsString>true</bigDecimalAsString>
<dateLibrary>java8</dateLibrary>
<performBeanValidation>true</performBeanValidation>
<useBeanValidation>true</useBeanValidation>
<skipDefaultInterface>true</skipDefaultInterface>
<library>spring-boot</library>
<interfaceOnly>false</interfaceOnly>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>