Spring MVC 中常见的 URL Mapping 有两种 BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping 。但是使用这两种 UrlHandlerMapping 都有不足。前者只能将 Url 定位到 Class 级别;后者缺乏灵活性。
在 Spring 2.5 的 MVC 中,有了 @RequestMapping。它能够将 Url Mapping 对应到 Method 级别。但直接将 Url 对应到 Method 也不是很好的方式。
其实,将 @RequestMapping 和传统的 UrlHandlerMapping 结合使用,我们就能够得到一个较为理想的解决方案。通过使用 ControllerBeanNameHandlerMapping 或 ControllerClassNameHandlerMapping,我们能够将 Url 对应到 Controller 级别,这只是 Url 中的一级。通过 @RequestMapping,我们可以将最终的 Url 对应到 Method 上。
举个例子:
@Controller
public class TestController extends BaseController {
@RequestMapping
public void create() {
}
}
Spring 配置:
<context:component-scan base-package="com.xxx.xxx" /> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
通过这些代码,我们就可以将 app_root/test/create.(do) (.do 是可换的,这取决于 web.xml 的配置) 对应到 TestController 的 create 方法上了。但是,目前这种 Url Mapping 方式还不能处理 Method overload。