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

如何为Swagger UI中的Spring Boot控制器配置独立访问URL?

解决Spring Boot中每个控制器独立Swagger UI访问的问题

先修复代码里的致命错误

你的api()方法有两个直接导致分组失效的问题:

  1. 变量拼写错误:controlerInfos少了字母l,正确变量名是controllerInfo
  2. 返回语句位置错误:return groups;写在循环内部,导致循环第一次执行就直接返回,根本不会处理后续的控制器信息

修复后的代码:

@Bean
public List<GroupedOpenApi> api() {
    List<String[]> controllerInfos = ControllerClassServiceImpl.getPackageNamesAndApiUris();
    List<GroupedOpenApi> groups = new ArrayList<>();

    for(String[] controllerInfo : controllerInfos ){
        groups.add(GroupedOpenApi.builder()
            .group(controllerInfo[0])
            .pathsToMatch("/" + controllerInfo[1] + "/**")
            .build());
    }
    return groups; // 将return移到循环外部,确保所有分组都能被创建
}

配置独立访问的Swagger UI路径

默认Swagger UI通过下拉菜单切换分组,要实现每个分组拥有独立URL,需在配置文件中添加以下设置:

若使用application.properties

springdoc.swagger-ui.enabled=true
springdoc.swagger-ui.path=/swagger-ui/{group}/index.html

若使用application.yml

springdoc:
  swagger-ui:
    enabled: true
    path: /swagger-ui/{group}/index.html

验证访问效果

配置完成后,每个分组的Swagger UI即可通过独立URL访问:
http://localhost:8080/swagger-ui/你的分组名称/index.html
这里的「你的分组名称」对应你在GroupedOpenApi.builder().group()中设置的controllerInfo[0]值。

额外提示

  • 确保ControllerClassServiceImpl.getPackageNamesAndApiUris()返回的数组格式正确:每个数组的第一个元素为分组名称,第二个元素为控制器的路径前缀
  • 如果控制器按包结构区分,也可以用.packagesToScan()替代.pathsToMatch(),示例:
.group(controllerInfo[0])
.packagesToScan(controllerInfo[0]) // 假设controllerInfo[0]是控制器所在的包名
.build()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:25