繁体   English   中英

带有 springdoc-openapi-ui 的 Swagger UI 不显示生成的“@Controller”类中的 API

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM