簡體   English   中英

如何使用 OpenAPITools 創建 Spring-Boot REST 服務器

[英]How to Create a Spring-Boot REST Server Using OpenAPITools

我使用 swagger.io 上的工具創建了一個 Spring Boot 服務器,我現在將其移植到 OpenAPITools。 但我找不到等效的生成器。 我嘗試將 generaterName 設置為 spring,但它創建了一個稍微不同的應用程序。 首先,它使用 WebMvcConfigurer Bean,即使它不是 MVC 應用程序。 其次,生成的控制器和 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>

我知道你在這里發帖的前一天在我們的 Slack 頻道上問了同樣的問題,但你從未回復我的回復,所以我在這里復制。

如果您已將庫指定為 spring-mvc,則 Spring 應該只輸出 MVC 文件。 對於這些生成器,我們的默認庫是spring-boot 我建議檢查你的 pom 和任何外部配置(通過 configFile 或 maven 屬性指定),看看你是否有一些沖突的配置。

您可以在我們的 repo 中與此示例的配置文件進行比較。

我們支持以下庫:

  • 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、屬性、README 以及您已創建(或計划)的任何實現文件……在您的項目根目錄中創建一個名為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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM