我正在尝试在我的 Spring Boot 应用程序中添加 Swagger (OpenAPI),并按以下方式配置它:
我的 pom.xml 文件具有以下依赖项:
<!-- Swagger UI -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.9</version>
</dependency>
应用程序类有一个 @SpringBootApplication 注解并定义了以下 bean:
/** Swagger Configuration */
@Bean
public OpenAPI seatManagerOpenAPI() {
return new OpenAPI()
.info(new Info().title("Service API")
.description("Some Description")
.version("0.0.1")
.license(new License().name("Apache 2.0").url("http://springdoc.org")))
.externalDocs(new ExternalDocumentation()
.description("Some Documentation")
.url("https://somelink")
);
}
我的 Spring Boot 应用程序有一个控制器:
@RestController
@RequestMapping("/serviceName")
public class ServiceNameController
我的 application.yml 添加了以下内容:
springdoc:
packagesToScan: path.to.service
pathsToMatch: /serviceName/**
swagger-ui:
path: /serviceName/swagger-ui
通过这个非常基本的配置,Swagger 可以在我的本地主机上完美运行:
[http://localhost:8082/servicename/swagger-ui/index.html]
但是,当部署到 AWS 上的 ECS 集群时,我的请求通过负载均衡器 (ALB) 传递 - 我收到以下错误:“无法加载远程配置”。在浏览器中检查这一点,我在日志中看到 404 状态和一条消息:
undefined /v3/api-docs/swagger-config
我有一个在 ECS 上运行的由多个微服务组成的集群。负载均衡器根据路径将各种https调用定向到相关的目标组(服务),例如:
IF Path is /servicename/* AND Host is someHost
Then forward to [relevant target group] (service)
我看过很多关于类似错误的帖子,以及与 API 网关(我根本没有在 AWS 上使用)或 Spring Security 库(我根本没有使用)配置相关的答案。
我尝试添加这个bean:
@Bean
ForwardedHeaderFilter forwardedHeaderFilter() {
return new ForwardedHeaderFilter();
}
我还在 application.yml 文件中尝试了许多配置,添加和删除了许多具有不同值的属性(不仅仅是这里包含的属性):
springdoc:
# swagger-ui:
# use-root-path: false
# url: "/v3/api-docs"
# disable-swagger-default-url: true
# path: /serviceName/swagger-ui
# configUrl: "/swagger-config.yaml"
# use-root-path: true
# urls:
# url: "/v3/api-docs"
# name: "seat-manager"
# api-docs:
# enabled: true
# path: /v3/api-docs/swagger-config
我还尝试将 swagger-config.json 文件添加到我的资源和资源/静态文件夹中,并来回更改内容,但我无法使其工作。
我在这里缺少什么?什么设置实际上可以让 swagger 在我的云中远程工作?
提前非常感谢!
我遇到了同样的问题,解决方案很简单。在 ALB 上,您还需要公开 docu json 页面,稍后还需要公开 api 路径(用于调用)。
简而言之:为了让 swagger 在 ALB 上工作,需要公开以下内容: