![](/img/trans.png)
[英]Swagger springdoc-openapi-ui doesn't work when SpringBoot run in JAR [SOLVED]
[英]Swagger UI with springdoc-openapi-ui doesn't show the APIs in the generated "@Controller" class
我有一个 Spring Boot 应用程序,其中 API 被指定为 OpenAPI 3.0.2 YAML 文档。 我使用 openapi-generator-maven-plugin 从规范中生成代码。 当我打开 http://localhost:8080/swagger-ui.html 时,它显示:“规范中没有定义任何操作!”
在规范中,我有:
servers:
- url: /books/api/v1
这导致控制器类:
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2021-06-17T14:52:43.686820-07:00[America/Los_Angeles]")
@Controller
@RequestMapping("${openapi.axmPlatformKeyService.base-path:/books/api/v1}")
public class SvcApiController implements SvcApi {
// ...
// ...
}
如果我在 editor.swagger.io 中加载 openapi-definition.yaml,它会按预期显示定义。
如果我以这种方式创建另一个控制器:
@RestController
public class AddonController implements SvcApi {
// ...
// ...
}
然后 Swagger UI 显示 API,这基本上意味着如果生成的代码具有“@RestController”,它就会正常工作。
由于生成的控制器是用@Controller 注释的,Swagger UI 无法获取它。 即使在添加了这个额外的 @RestController 之后,Swagger UI 的 Try it out 功能也不在它生成的 URL 中包含“/books/api/v1”。
Net-effect 与此 AddonController 一起使用,如果我在规范中有一个请求 /book/{id},则服务中有两个端点:
/books/api/v1/book/{id} /book/{id}
后者由 Swagger UI 调用。
这些是相关的依赖项:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
</dependency>
添加一个静态初始值设定项
SpringDocUtils.getConfig().addRestControllers(SvcApiController.class)
解决了这个问题。 在这种情况下不需要 AddonController。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.