Swagger 访问不到 报错:o.s.web.servlet.PageNotFound : No mapping for GET /doc.html

1.使用的版本

Swagger版本:2.9.2

Spring Boot版本:2.6.15

2.问题

(1)控制台报错

o.s.web.servlet.PageNotFound - No mapping for GET /swagger-ui.html

WARN  o.s.web.servlet.PageNotFound - No mapping for GET /swagger-ui.html

(2)页面报错

This application has no explicit mapping for /error, so you are seeing this as a fallback.

3.问题原因

实现了WebMvcConfigurer接口,重写了addResourceHandlers方法

package com.sdses.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyWebMVCConfig implements WebMvcConfigurer {

    @Value("${digital.file.resource-path}")
    private String resourcePath;

    @Value("${digital.file.base-file-path}")
    private String locationPath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //匹配到resourceHandler,将URL映射至本地文件夹
        registry.addResourceHandler(resourcePath).addResourceLocations("file:///" + locationPath);
    }
}

4.解决

  经过分析发现由于项目中有配置类(@Configuration)继承了WebMvcConfigurer类 ,重写了addResourceHandlers()方法,导致默认的Swagger静态资源被覆盖,而缺失了配置。需要重新指定静态资源。

可在该继承配置类中,显式添加如下swagger静态资源:

配置Swagger UI和WebJars资源的访问路径
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //匹配到resourceHandler,将URL映射至本地文件夹
        registry.addResourceHandler(resourcePath).addResourceLocations("file:///" + locationPath);

        // 配置Swagger UI和WebJars资源的访问路径,使得这些静态资源可以通过特定的URL路径在Web应用中被访问
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

    }
}

<think>好的,我现在要解决用户在Spring Boot应用中使用Swagger3时遇到的访问/v3/api-docs/swagger-config路径出现“No mapping for GET”的问题。首先,我需要回忆一下Swagger3的基本配置和可能引发这个问题的原因。 首先,用户提到他们参考了引用[1]中的示例,引入了Swagger依赖,并且可能按照文档进行了配置。但访问路径时出现问题,说明配置可能有问题或者依赖版本不兼容。 接下来,我需要考虑可能的原因: 1. **依赖问题**:可能使用了错误的Springfox或Spring Boot版本。Spring Boot 2.6及以上版本与Springfox的兼容性可能存在问题,特别是因为Spring Boot 2.6开始对PathPatternParser的默认使用,而Springfox可能未完全适配。 2. **配置类问题**:可能没有正确配置SwaggerDocket Bean,或者缺少必要的注解,比如@EnableOpenApi或@Configuration。 3. **路径匹配策略变更**:Spring Boot 2.6之后默认使用PathPatternParser,而Springfox可能未适应这一点,导致路径匹配失败。 4. **拦截器或过滤器干扰**:可能存在安全配置或其他拦截器阻止了对Swagger相关路径的访问。 接下来,我需要逐步分析每个可能的原因并提供对应的解决方案。 首先,检查依赖是否正确。用户使用的是Spring Boot 2.6+,所以需要确认Springfox的版本是否兼容。根据引用[1],使用的是Springfox 3.0.0,但可能需要更高的版本或者需要额外处理。例如,可能需要添加springfox-boot-starter依赖,而不是单独的springfox-swagger2和springfox-swagger-ui。 其次,检查配置类是否正确。确保有@EnableOpenApi注解,并且Docket Bean被正确配置,包括apiInfo和路径选择。如果Docket的路径配置不正确,可能导致Swagger无法生成相应的配置端点。 第三,关于路径匹配策略的问题,用户可能需要手动设置Spring MVC使用AntPathMatcher,通过在application.properties中添加spring.mvc.pathmatch.matching-strategy=ant_path_matcher,以解决与PathPatternParser的兼容性问题。 第四,检查是否存在安全配置,比如Spring Security,可能拦截了/v3/api-docs/**的请求。需要确保这些路径被放行,不被认证拦截。 此外,还需要检查是否存在其他配置错误,比如错误的包扫描路径,导致Swagger没有正确识别API接口,从而无法生成配置信息。 可能还需要检查应用的日志,查看是否有相关的错误信息,比如Bean配置失败或者路径映射错误,这有助于定位问题。 最后,如果上述方法都无效,可能需要考虑升级到SpringDoc OpenAPI替代Springfox,因为Springfox已经停止维护,而SpringDoc支持较新的Spring Boot版本,并且配置更为简单。</think>### 解决 Spring Boot Swagger3 访问 `/v3/api-docs/swagger-config` 出现 "No mapping for GET" 的方法 #### 1. 检查依赖配置 确保 `pom.xml` 或 `build.gradle` 中使用的 **Springfox Swagger** 依赖与 Spring Boot 2.6+ 兼容: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` ⚠️ 注意: - 必须使用 `springfox-boot-starter` 而非旧版 `springfox-swagger2` 和 `springfox-swagger-ui` - 若使用 Spring Boot 3.x,需改用 **SpringDoc OpenAPI**(Springfox 已停止维护)[^1] --- #### 2. 添加路径匹配策略配置 Spring Boot 2.6+ 默认使用 `PathPatternParser`,而 Springfox 3.0.0 可能未完全适配。 在 `application.properties` 中强制使用旧版路径匹配策略: ```properties spring.mvc.pathmatch.matching-strategy=ant_path_matcher ``` --- #### 3. 验证 Swagger 配置类 确保配置类包含以下关键注解和配置: ```java @Configuration @EnableOpenApi // 必须添加此注解 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .select() .apis(RequestHandlerSelectors.basePackage("com.your.package")) // 指定扫描包 .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API Documentation") .version("1.0") .build(); } } ``` --- #### 4. 检查安全配置 如果项目集成了 Spring Security,需放行 Swagger 相关路径: ```java @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-resources/**").permitAll() // 其他配置... } } ``` --- #### 5. 验证最终访问路径 正确访问顺序应为: 1. 接口文档配置:`http://localhost:8080/v3/api-docs/swagger-config` 2. Swagger UI:`http://localhost:8080/swagger-ui/` --- §§ 1. Spring Boot 3.x 如何集成 OpenAPI 文档? 2. 如何自定义 Swagger 的全局授权配置? 3. Swagger 接口分组显示的实现方式? [^1]: 引用来源为站内示例配置说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值