SpringMVC默认扫描所有带有@Controller或@RequestMapping的类和方法,如果找不到还会去父类或父接口中去找

这样像feign的那种写api,controller实现api的写法,就会被扫描两次,报Ambiguous mapping错误,可以通过以下配置,只扫描带有@Controller的类。
@Configuration
@ConditionalOnClass({Feign.class})
public class FeignConfig {
@Bean
public WebMvcRegistrations feignWebRegistrations() {
RequestMappingHandlerMapping handlerMapping = this.requestMappingHandlerMapping();
return new WebMvcRegistrations() {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return handlerMapping;
}
};
}
/**
* 使SpringMVC只扫描带有@Controller的@RequestMapping,而忽略掉带有@RequestMapping的FeignClient的接口,从而避免启动报Ambiguous mapping错误
*/
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
return new RequestMappingHandlerMapping() {
@Override
protected boolean isHandler(Class<?> beanType) {
return super.isHandler(beanType) && (AnnotationUtils.findAnnotation(beanType, Controller.class) != null);
}
};
}
}

当在SpringMVC环境中使用Feign时,由于Spring默认扫描@Controller和@RequestMapping,可能导致API映射重复,从而出现Ambiguous mapping错误。为避免此问题,可以通过配置仅扫描带有@Controller注解的类。

2360

被折叠的 条评论
为什么被折叠?



