You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC(非Spring Boot)集成SpringDoc后Swagger UI加载Petstore而非自定义API的问题求助

Spring MVC(非Spring Boot)集成SpringDoc后Swagger UI加载Petstore而非自定义API的问题求助

嘿,我之前在非SpringBoot的Spring MVC项目里集成SpringDoc时也踩过这个坑,太懂这种看到Petstore默认页面的无语感了!给你几个亲测有效的排查和解决方向,应该能帮你把自己的控制器API加载出来:

核心问题:SpringDoc在非SpringBoot环境下不会自动扫描控制器

SpringBoot里SpringDoc会自动做很多配置,但纯Spring MVC环境下得手动指定要扫描的API范围,不然它找不到你的控制器,就只能显示默认的Petstore。

1. 手动添加API分组扫描配置

在你的OpenApiConfig里新增一个GroupedOpenApi的Bean,明确指定要扫描的控制器包路径,这是最关键的一步:

@Configuration
public class OpenApiConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("API Documentation").version("1.0")
                        .description("API running under /integration context path"));
    }

    // 新增这个Bean,指定你的控制器所在包
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("integration-apis") // 自定义分组名称
                .packagesToScan("com.yourproject.controllers") // 替换成你实际的控制器包路径
                .pathsToMatch("/integration/**") // 可选,过滤你的API路径前缀
                .build();
    }
}

2. 修正Swagger UI的配置,指向自己的API文档

默认情况下Swagger UI会指向Petstore的地址,你需要手动配置它指向你的v3/api-docs接口:
在配置类里新增SwaggerUiConfigParameters的Bean:

@Bean
public SwaggerUiConfigParameters swaggerUiConfigParameters() {
    SwaggerUiConfigParameters config = new SwaggerUiConfigParameters();
    config.setUrl("/integration/v3/api-docs"); // 注意要带上你的context path /integration
    config.setDeepLinking(true); // 可选,开启深度链接,方便直接跳转到具体API
    return config;
}

另外,你的WebConfig里的资源映射可以补充一个swagger-ui.html的直接映射,避免部分版本的路径匹配问题:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/4.18.2/");
        registry.addResourceHandler("/v3/api-docs/**")
                .addResourceLocations("classpath:/META-INF/resources/v3/api-docs/");
        // 新增swagger-ui.html的直接映射
        registry.addResourceHandler("/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/4.18.2/index.html");
    }
}

3. 确保Spring能扫描到你的控制器

检查你的Spring配置,确保控制器所在的包被Spring的组件扫描覆盖到:

  • 如果用注解配置,在你的核心配置类上加上@ComponentScan(basePackages = "com.yourproject")(替换成你项目的根包)
  • 如果用XML配置,确保<context:component-scan base-package="com.yourproject.controllers" />已经配置
    毕竟如果Spring都没把你的控制器注册为Bean,SpringDoc根本找不到它们。

4. 先验证API文档接口是否正常

在调整配置后,先直接访问你的API文档地址:http://你的域名:端口/integration/v3/api-docs

  • 如果返回的是你自己的API JSON文档,那说明SpringDoc已经正确生成了API,只是Swagger UI的配置问题
  • 如果还是返回Petstore的内容,那回到第一步,检查GroupedOpenApi的包扫描路径是否正确,或者有没有拼写错误

5. 确认依赖版本一致性

检查你的依赖配置(Maven/Gradle),确保springdoc-openapi-ui和swagger-ui-webjar的版本和你配置里的一致,比如你用了4.18.2的swagger-ui,就要保证依赖里的版本也是4.18.2,避免资源加载不匹配的问题。

按照这些步骤一步步来,应该就能把Swagger UI切换到显示你自己的API了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:44:33