如何为Swagger UI中的Spring Boot控制器配置独立访问URL?
解决Spring Boot中每个控制器独立Swagger UI访问的问题
先修复代码里的致命错误
你的api()方法有两个直接导致分组失效的问题:
- 变量拼写错误:
controlerInfos少了字母l,正确变量名是controllerInfo - 返回语句位置错误:
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
相关产品推荐
相关产品推荐

