我正在开发一个 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}
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 存在。
我也面临着同样的问题。然后通过添加适当版本的 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