当前位置: 首页 > 知识库问答 >
问题:

更改Spring openapi生成器插件生成接口的返回类型

吕学
2023-03-14

我已经成功地从一个。yaml打开api描述符文件,但正如问题标题中所述,我希望将这些接口的响应类型从ResponseEntity更改为我自己的类型。基本上,接口没有此签名:

 ResponseEntity<Void> clearCache();

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

public void clearCache(){ //do something}

我希望生成的接口尽可能简单

void clearCache();

同样的事情,我自己定义的类,而不是响应实体

        <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>

共有3个答案

臧威
2023-03-14

菲洛诺斯的回答是朝着好的方向迈出了一步。可以在这里找到Spring Boot的所有模板。但仅仅更改“api.mustache”是不够的,因为“api.mustache”不包含默认方法实现的模板。您必须禁用默认方法实现的生成,或者为其更改模板。

如前所述,您必须在pom中指定模板目录。xml:

<configuration>
 <templateDirectory>${project.basedir}/src/main/resources/custom</templateDirectory>
 <skipDefaultInterface>true</skipDefaultInterface>

步骤1-api.mustache:

此处删除“import org.springframework.http.ResponseEntity;”,只是为了确保它不再被使用。然后通过替换“ResponseEntity”从返回类型中删除ResponseEntity

步骤2-禁用默认方法生成或更改方法Body.mustache:

使用“skipDefaultInterface”选项禁用默认实现的生成(如pom.xml中所示)。否则,编辑“methodBody.mustache”在“returnnewresponseEntity”前面添加“抛出新的IllegalArgumentException(“未实现”);/”

松旭
2023-03-14

我不知道你为什么要那样做。您可以简单地将ResponseEntity想象为您的类型的包装器,增加了处理标准HTTP特性(如HTTP状态代码和头)的可能性。有关更多详细信息,请参见此处。在你的情况下,你只会这样做

ResponseEntity.noContent().build(); //void

ResponseEntity.ok(myBook) //to return your MyBook type
艾泉
2023-03-14

我们最近遇到了类似的挑战。您需要做的是调整模板。为此,您需要从OpenAPI项目中找到生成器的源模板。这就是api。胡须文件在您的案例中。

只需将其复制到您的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>

还可以查看此模板文档,以了解有关此主题的更多信息。

 类似资料:
  • 生成器返回值 PHP7支持通过Generator::getReturn获取生成器方法return的返回值。 PHP5中我们约定使用Generator最后一次yield值作为返回值。 <?php final class AsyncTask { public function begin() { return $this->next(); } //

  • 我试图从我们需要实现的一个招摇过市的文件中生成接口。它是从外部来源提供的。我通常先使用契约,但在java/kotlin中很长一段时间没有这样做。 我已经建立了一个项目,希望尽可能多地控制我的代码。我尝试使用

  • 统一生成器接口 由于内部隐式rewind,需要先调用Generator::current获取当前value,而直接调用Generator::send会跳到第二次yield。 send方法参考 生成器参考 <?php class Gen { public $isfirst = true; public $generator; public function __const

  • 我尝试重命名类,但这是同样的问题,甚至我创建了一个新的类并复制了代码。我认为XCode是从一种缓存中获得的,因为即使是我删除的属性,比如标签栏项中的图标,在我运行应用程序时仍然存在。 会有什么问题?

  • 我正在使用MapStruct和maven,如文档中所述(http://mapstruct.org/documentation/stable/reference/html/). 现在,我想将生成的映射器类的位置从目标文件夹更改为源文件夹。我已经阅读了如何更改mapstruct生成的类location和M2E,以及如何将maven生成的源文件夹作为eclipse源文件夹,并通过使用maven处理器插件

  • 就像片名里说的那样,我得到了疯狂的按摩,我无法应付 每次我运行我的项目时,都会出现一些疯狂的bug或者一些bar消失。有人知道该怎么做吗?