在 Spring Boot 中使用 Gradle 从 Swagger OpenAPI 生成 RestClient 存根

Posted

技术标签:

【中文标题】在 Spring Boot 中使用 Gradle 从 Swagger OpenAPI 生成 RestClient 存根【英文标题】:Generating RestClient stubs from Swagger OpenAPI in Spring Boot with Gradle 【发布时间】:2021-10-20 06:59:32 【问题描述】:

对面:Generate Spring MVC controller from Swagger/OpenAPI

需要将我的 Spring Boot 项目与暴露 Swagger OpenApis 的远程服务器集成。我可以从服务中成功下载swagger.json 描述符,但我希望在为许多Java 方法生成REST 存根时提供一些自动帮助。我正在使用 Gradle。我更喜欢将swagger.json 提交到我的项目中,以便能够离线构建(不公开远程服务)并利用 Gradle 的输入缓存。

到目前为止,我可以利用 Swagger generator for Gradle 完成大部分工作。

我可以试试

apply plugin: 'org.hidetake.swagger.generator'

dependencies 
    swaggerCodegen 'io.swagger.codegen.v3:swagger-codegen-cli:3.0.5'  // or Swagger Codegen V3
    swaggerCodegen 'org.openapitools:openapi-generator-cli:3.3.4'     // or OpenAPI Generator


swaggerSources 
    remoteservice
        inputFile = file("$project.rootDir/gradle/swagger-remoteservice.json")
        code 
            language = 'spring'
        
    

输出是build/swagger-code-remoteservice 中一个成熟的 Gradle Spring Boot 项目,还包含一个 Spring Boot 可执行文件。

我必须复制我感兴趣的部分:

DTO。所有这些都是自动生成的这是我提到的最大部分 *Api 接口

然后我必须利用 RestTemplate 实现一个 Spring 服务来执行 Swagger 操作。由于要执行许多操作,因此需要时间。

我必须编写的其他代码

public class ApiRestImpl implements Api, InitializingBean 


    private RestOperations restTemplate;


    @Override
    public void afterPropertiesSet() throws Exception 
        restTemplate = new RestTemplateBuilder()
             ... //authorization
                .build();
    


    @Override
    public ResponseEntity<Item> getById(Integer id, Boolean bool) 
        UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(properties.getUrl() + "/api/v1/Items/id")
                .queryParam("bool", bool
        return restTemplate.getForEntity(
                uriBuilder.toUriString(),
                Item.class,
                id
        );
    


我想做的事

我想生成一个完全(或几乎完全)工作的客户端,可能基于RestTemplate。我可以在自己的调用代码中集成一些东西来执行 REST 操作。

我可以看到 Spring Boot 项目使用 build/generated 目录,该目录包含在类路径中

在这种情况下,我不希望在运行时生成并最终扫描控制器,因此我必须将输出复制到源目录。

【问题讨论】:

不,我没有。这意味着您的评论值得回答。我将结束这一天,明天再试 我只是把它变成了一个答案:) 【参考方案1】:

您可以尝试使用OpenAPI gradle plugin。 java client generator 有一个库选项“resttemplate”。

【讨论】:

以上是关于在 Spring Boot 中使用 Gradle 从 Swagger OpenAPI 生成 RestClient 存根的主要内容,如果未能解决你的问题,请参考以下文章

多模块 Spring Boot 项目中的 Gradle 依赖插件

使用Spring Boot Gradle插件的多模块项目

无法在gradle中升级spring boot版本

如何使用 gradle 6+ 和 java 11+ 在 Spring Boot 中配置 spock

如何在 Eclipse 中使用 Gradle 运行 Cucumber + Spring Boot 应用程序

从 Gradle 中的 Spring Boot 中排除 Tomcat 依赖项