SpringBoot
默认的
RequestMappingHandlerMapping
实现会扫描项目目录下的所有带有
@Controller
和
@RequestMapping
类进行处理.
RequestMappingHandlerMapping.isHandler
@Override
protected boolean isHandler(Class<?> beanType) {
return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) ||
AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class));
}
由于我们的项目中 在
web.controller
包之外的其他类中也会用到
@RequestMapping
注解,但是这里面的并不是项目需要对外提供的路径,因此需要将这些类型的类过滤掉。
这里需要定义自己的扫描方式,只需要重写
isHandler
方法只扫描我们项目中提供接口的类即可:
public class RestRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
@Override
protected boolean isHandler(Class<?> beanType) {
return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) ||
AnnotatedElementUtils.hasAnnotation(beanType, RestController.class));
}
}
由于们的项目中对外接口都使用了
@RestController
注解,所以不需要扫描带有
@RequestMapping
的类,如果大家的项目比较复杂,可以尝试通过自定义注解的方式解决这个问题。
配置MVC
@Configuration()
public class WebConfig extends DelegatingWebMvcConfiguration{
@Override
protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
return new RestRequestMappingHandlerMapping();
}
}
这里我们继承了
DelegatingWebMvcConfiguration
类并重写
createRequestMappingHandlerMapping()
方法即可,这里需要特别注意的是
不能使用
@EnableWebMvc
注解。