在 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 依赖插件
如何使用 gradle 6+ 和 java 11+ 在 Spring Boot 中配置 spock