首页 > 解决方案 > 更改 Spring openapi-generator-maven-plugin 生成的接口的返回类型

问题描述

我已经设法从 .yaml open-api 描述符文件生成接口,但是,如问题标题所示,我希望将这些接口的响应类型从 ResponseEntity 更改为我自己的类型。基本上不是具有此签名的接口:

 ResponseEntity<Void> clearCache();

对于基本上以这种方式实现的方法:

public void clearCache(){ //do something}

我希望生成的界面尽可能简单

void clearCache();

我自己定义的类也是如此,而不是ResponseEntity<MyBook> getBook(String ISBN);我希望它只MyBook用作返回类型,所以它应该看起来像MyBook getBook(String ISBN); 我用于 openapi-generator 插件的当前设置是

        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <version>4.3.0</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>my-own-service-be/src/main/resources/api-docs.yaml</inputSpec>
                        <generatorName>spring</generatorName>
                        <additionalProperties>
                             <additionalProperty>skipDefaultInterface=true</additionalProperty>
                            <additionalProperty>interfaceOnly=true</additionalProperty>
                        </additionalProperties>
                        <generateApis>true</generateApis>
                        <apiPackage>controller</apiPackage>
                        <supportingFilesToGenerate>false</supportingFilesToGenerate>
                        <modelPackage>dto</modelPackage>
                        <generateModelTests>false</generateModelTests>
                        <generateApiTests>false</generateApiTests>
                    </configuration>
                </execution>
            </executions>
        </plugin>

标签: javaspringspring-bootopenapiopenapi-generator

解决方案


我们最近遇到了类似的挑战。您需要做的是调整模板。为此,您需要从 OpenAPI 项目中为您的生成器找到源模板。在你的情况下就是这个api.mustache文件

只需将其复制到您的src/main/resources/文件夹(可能在名为 的子文件夹中custom)并根据您的需要进行调整,即替换响应类型。

然后,您将需要调整您pom.xml的自定义模板文件以实际使用:

     <configuration>

        <!-- The following line is crucial: -->
        <templateDirectory>${project.basedir}/src/main/resources/custom</templateDirectory>

        <inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
        <generatorName>spring</generatorName>
        <configOptions>
            <sourceFolder>src/gen/java/main</sourceFolder>
        </configOptions>
    </configuration>

另请查看此模板文档以获取有关该主题的更多信息。


推荐阅读