【发布时间】: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