Swagger UI 不工作,但 /v3/api-docs 可以在 Spring Boot 中通过上下文路径访问

问题描述 投票:0回答:1

问题

我正在开发一个 Spring Boot 应用程序,尽管

/v3/api-docs
工作得很好,但无法访问 Swagger UI。我的应用程序使用自定义
server.servlet.context-path
,尽管尝试了各种配置,但我仍无法解决问题。

{"type":"about:blank","title":"Not Found","status":404,"detail":"No static resource swagger-ui/index.html.","instance":"/api/swagger-ui/index.html","properties":null}


详情

  • Spring Boot 版本:3.x
  • Swagger 依赖

groovy implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'

application.yml 配置:

server:
  port: 3000
  servlet:
    context-path: /api/

springdoc:
  api-docs:
    path: /v3/api-docs
  swagger-ui:
    path: /swagger-ui/index.html
    enable: true
  show-actuator: true

预期行为 Swagger UI 应可通过以下位置访问:

http://localhost:3000/api/swagger-ui/index.html 

其他背景

我无法删除 server.servlet.context-path,因为应用程序依赖它来实现其他端点。 该应用程序使用自定义 JacksonConfig 和 SecurityConfiguration 。

1)依赖验证: 已验证是否包含 springdoc-openapi-starter-webmvc-ui:2.2.0 并且正确下载了依赖项。

2)显式资源映射: 添加了自定义 WebMvcConfigurer 来映射 Swagger UI 资源:

@Configuration
public class SwaggerStaticResourceConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/");
        registry.addResourceHandler("/v3/api-docs/**")
                .addResourceLocations("classpath:/META-INF/resources/");
    }
}

3)Spring 安全: 添加了明确的安全规则以允许公共访问 Swagger 端点:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(auth -> auth
            .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll()
            .anyRequest().authenticated())
        .csrf(AbstractHttpConfigurer::disable)
        .formLogin(AbstractHttpConfigurer::disable);
    return http.build();
}

4)依赖性检查: 检查了 springdoc-openapi-starter-webmvc-ui 的 JAR 文件并确认 META-INF/resources/webjars/swagger-ui/index.html 存在。

spring-boot spring-security swagger-ui spring-webmvc
1个回答
0
投票

我也面临着同样的问题。然后通过添加适当版本的 springdoc-openapi-starter-webmvc-ui 解决了该问题。 您需要根据您项目的Spring Boot版本来匹配springdoc-openapi-starter-webmvc-ui版本。 请参阅有关此的文档, https://springdoc.org/#what-is-the-compatibility-matrix-of-springdoc-openapi-with-spring-boot

© www.soinside.com 2019 - 2024. All rights reserved.