Spring Boot中Swagger UI控制器接口与实现端点重复问题解决
解决Swagger UI端点重复显示问题
问题原因
你遇到的重复端点问题,核心原因是当前的Swagger Docket配置会扫描所有带有@RequestMapping注解的方法——而你的接口ConsentApi(带有Swagger注解和@RequestMapping)和实现类ConsentApiController(继承了接口的方法,自然也带有@RequestMapping的元数据)都被Swagger识别为了端点来源,所以UI里会显示重复的条目。
解决方案
只需要修改Docket配置中的apis()选择器,让Swagger只扫描你的接口类(也就是带有@Api注解的类),而不是所有带@RequestMapping的方法。
修改后的Docket配置
@Bean public Docket customImplementation() { return new Docket(DocumentationType.SWAGGER_2) .select() // 关键:只扫描带有@Api注解的接口类 .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) .paths(PathSelectors.ant("/consent/*")) .build() .directModelSubstitute(java.time.LocalDate.class, java.sql.Date.class) .directModelSubstitute(java.time.OffsetDateTime.class, java.util.Date.class) .apiInfo(apiInfo()); }
其他可选方案
如果你的接口和实现类位于不同的包下,也可以通过指定接口所在包来筛选:
.apis(RequestHandlerSelectors.basePackage("com.yourproject.api")) // 替换成你的接口实际所在包路径
验证效果
修改配置后重启应用,打开Swagger UI,你会发现之前重复的端点已经消失,只会显示ConsentApi接口中定义的那些端点了。
另外需要注意:确保你的实现类ConsentApiController没有额外添加@RequestMapping或Swagger相关注解,避免再次触发重复扫描。
内容的提问来源于stack exchange,提问作者Funsaized
相关产品推荐
相关产品推荐

