You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

升级Springfox至2.8.0后Swagger资源访问路径错误如何解决?

解决Springfox 2.8.0中Swagger资源路径错误的问题

这个问题我之前帮同事排查过,是Springfox 2.8.0版本里Swagger UI的静态资源路径配置出了点小问题,给你几个靠谱的解决办法:

方法一:指定Swagger的基础路径

在你的Swagger配置类(标注了@EnableSwagger2的类)里,创建Docket实例时加上pathMapping配置,把它设为你的API前缀/api

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.your.project.package"))
            .paths(PathSelectors.any())
            .build()
            .pathMapping("/api"); // 这行是关键,修正基础请求路径
}

这个配置会让Swagger UI自动以/api作为所有资源请求的根路径,不会再错误地把swagger-ui.html拼接到资源路径里。

方法二:手动配置静态资源映射

如果方法一没生效,可能是Spring MVC的静态资源映射规则没处理好。你可以在实现WebMvcConfigurer的配置类里添加以下映射:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    // 映射Swagger UI页面
    registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");
    
    // 映射Swagger UI依赖的webjars资源
    registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
    
    // 重点:确保swagger-resources的请求路径正确映射
    registry.addResourceHandler("/api/swagger-resources/**")
            .addResourceLocations("classpath:/META-INF/resources/swagger-resources/");
}

这样Spring就能正确路由/api/swagger-resources/开头的请求到对应的静态资源文件,避免路径拼接错误。

方法三:排除Swagger路径的拦截/过滤

如果项目里有自定义的拦截器或过滤器,可能会修改请求路径导致问题。你需要确保这些组件排除Swagger相关的路径:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(yourCustomInterceptor)
            .excludePathPatterns(
                "/api/swagger-ui.html",
                "/api/swagger-resources/**",
                "/api/webjars/**",
                "/api/v2/api-docs"
            );
}

如果是过滤器,也要类似地排除这些路径,避免它们干扰Swagger的资源请求。

额外建议

如果以上方法都没解决问题,可以尝试清理Maven/Gradle的依赖缓存,重新拉取Springfox的依赖包——有时候依赖包损坏也会导致这种奇怪的路径问题。

内容的提问来源于stack exchange,提问作者alexanoid

火山引擎 最新活动