java 为Sping Boot 生成OpenAPI服务器代码的依赖项

li9yvcax  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(144)

我有一个现有的Sping Boot 2.7.5项目。我决定开始使用OpenAPI来构建项目的其余API。
我的OpenAPI规范是3.0.3版
我将以下内容添加到我的pom文件中以生成服务器代码:

生成插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <version>6.4.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>
                            ${project.basedir}/src/main/resources/openapi.yaml
                        </inputSpec>
                        <generatorName>spring</generatorName>
                        <apiPackage>com.xxx.yyy.zzz.api</apiPackage>
                        <modelPackage>com.xxx.yyy.zzz.model</modelPackage>
                        <supportingFilesToGenerate>
                            ApiUtil.java
                        </supportingFilesToGenerate>
                        <configOptions>
                            <delegatePattern>true</delegatePattern>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

依赖关系

<dependency>
        <groupId>org.openapitools</groupId>
        <artifactId>openapi-generator</artifactId>
        <version>6.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.openapitools</groupId>
        <artifactId>jackson-databind-nullable</artifactId>
        <version>0.2.1</version>
    </dependency>

在这样做之后,我不断得到错误,例如:

[ERROR] Failed to execute goal [org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile [(default-compile) on project [xxx-svc: Compilation failure: Compilation failure: 
[ERROR] /C:/xxx/xxx-svc/target/generated-sources/openapi/src/main/java/com/xxx/yyy/zzz/model/XxxTypeNew.java:[49,34] cannot find symbol
[ERROR]   symbol:   method requiredMode()
[ERROR]   location: @interface io.swagger.v3.oas.annotations.media.Schema

为了解决这个问题,我添加了一个额外的依赖项:

<dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>2.2.8</version>
    </dependency>

我不明白的是为什么我必须添加这个依赖项?我如果我使用相同的版本为openapi生成器和依赖项,为什么生成的代码不会编译没有一个更多的依赖项?
如果这是一种非惯用的方式来使用OpenApi与SpringBoot,我愿意探索替代方案。

vwoqyblh

vwoqyblh1#

你缺少了springfox-swagger 2依赖项,它将拉取所有的Swagger类型:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>

生成器基于文本模板生成Java类,它不操作Java代码,因此不需要swagger依赖项。
模板在这里找到:https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator/src/main/resources/Java

相关问题