Spring Boot微服务中Swagger误显示其他包Controllers的问题求助
解决SpringDoc显示依赖包中Controller的问题
方案一:直接限定SpringDoc的扫描范围(推荐)
springdoc的扫描逻辑独立于Spring的@ComponentScan,最直接的方式是明确指定它只扫描你需要的包:
在
application.yml或application.properties中添加配置:springdoc: packages-to-scan: cm.test.p1.controller配置后springdoc只会扫描
cm.test.p1.controller下的Controller,不会触及p2的相关包。也可以通过Java代码配置
GroupedOpenApi,实现更灵活的API分组管理:@Configuration public class SpringDocConfig { @Bean public GroupedOpenApi p1Api() { return GroupedOpenApi.builder() .group("p1-api") .packagesToScan("cm.test.p1.controller") .build(); } }
方案二:修正@ComponentScan的排除过滤器
如果你的需求是让p2的Controller完全不被Spring容器管理(而非仅隐藏Swagger),需要确保@ComponentScan的排除规则配置正确。之前的正则或ASPECTJ模式可能未精准匹配,试试按注解类型排除:
@SpringBootApplication @ComponentScan(basePackages = {"cm.test.p1", "cm.test.p2"}, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = {RestController.class, Controller.class}, basePackages = "cm.test.p2") }) public class P1Application { public static void main(String[] args) { SpringApplication.run(P1Application.class, args); } }
该配置会明确排除cm.test.p2下所有标注了@RestController或@Controller的类,确保这些Controller不会被Spring注册,springdoc自然也不会显示它们。
方案三:排除SpringDoc中的特定类/包
如果p2的Controller必须被Spring管理,但仅需隐藏在Swagger中,可配置springdoc的排除规则:
springdoc: packages-to-exclude: cm.test.p2.controller
或者在GroupedOpenApi中针对性排除:
@Bean public GroupedOpenApi p1Api() { return GroupedOpenApi.builder() .group("p1-api") .packagesToScan("cm.test.p1", "cm.test.p2") .packagesToExclude("cm.test.p2.controller") .build(); }
注意事项
- 确认springdoc版本与配置属性兼容,部分旧版本可能使用
springdoc.swagger-ui.packages-to-scan而非统一的springdoc.packages-to-scan - 核对p2的Controller包路径是否准确,比如是否是
cm.test.p2.controller而非复数形式cm.test.p2.controllers
内容的提问来源于stack exchange,提问作者Mike S
相关产品推荐
相关产品推荐

