SpringBoot2.4.0集成Springfox3.0.0启动报Ambiguous search mapping错误如何解决
Swagger集成异常(Ambiguous search mapping detected)解决方案
该异常触发根因为Spring Data REST默认将Repository层同名重载查询方法映射到了相同的REST路径,Swagger启动时检测到路径冲突抛出异常,可通过以下方案解决:
- 方案1:使用
@RestResource注解指定不同映射路径
给重载的Repository方法添加Spring Data REST提供的org.springframework.data.rest.core.annotation.RestResource注解,手动指定唯一的path属性,示例如下:// 分页查询方法指定独立路径 @RestResource(path = "findByConversationIdPage") Page<Message> findByConversationId(Long conversationId, Pageable pageable); // 列表查询方法指定独立路径 @RestResource(path = "findByConversationIdList") List<Message> findByConversationId(Long conversationId); - 方案2:关闭不需要的Repository方法REST暴露
如果对应的Repository方法不需要对外提供REST接口,可给不需要暴露的方法添加@RestResource(exported = false)注解,或者全局配置Spring Data REST仅暴露带注解的方法,application.yml配置示例:spring: data: rest: detection-strategy: annotated - 方案3:调整Swagger扫描范围,仅扫描业务Controller层
大部分场景下Repository接口不需要生成接口文档,修改Swagger的Docket配置,指定仅扫描业务Controller所在的包,避免扫描到Repository层的接口映射,示例如下:@Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() // 替换为自己项目Controller层的包路径 .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx.controller")) .paths(PathSelectors.any()) .build(); }
内容的提问来源于stack exchange,提问作者hba
相关产品推荐
相关产品推荐

