【问题标题】:Generating RestClient stubs from Swagger OpenAPI in Spring Boot with Gradle在 Spring Boot 中使用 Gradle 从 Swagger OpenAPI 生成 RestClient 存根
【发布时间】: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 目录,该目录包含在类路径中

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

【问题讨论】:

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

标签: spring-boot gradle swagger


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2020-10-07
    • 2020-04-02
    • 2020-02-10
    • 2021-05-26
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多