Spring MVC Controller中的硬编码@RequestMapping URL


问题内容

我正在研究Spring 3,并在一个简单的Web应用程序中使用它。

现在,我正在使用注释实现Spring MVC Controller,而我想知道:使用@RequestMapping注释是否有最佳实践?

我的意思是:我已经看到通常在此批注中映射的URL在该类中进行硬编码…
是否可以通过“松散耦合的方式”传递URL(以获得更可重用的类)?

我知道可以使用一些 通配符 ,但是我认为这不是解决方案……我错了吗?

编辑:

我添加一个示例以更好地解释我的疑问。

假设我希望通过请求触发/foo/bar/baz/mypage.htm我的控制器,在我的控制器中,处理程序方法将带有注释@RequestMapping("/foo/bar/baz/mypage")

现在,我决定将触发我的控制器的URL更改为/foo/bar/otherpage.htm,因此我需要编辑我的类,放入@RequestMapping("/foo/bar/otherpage")我的处理程序方法,重新编译该项目,然后再次部署它。

在我看来似乎不那么实用…


问题答案:

当前带注释的控制器不是很可配置。

据我所知,唯一可行的办法解决这个问题是使用替代HandlerMapping小号为了控制器进行配置“基本URL”。例如,如下:

// Note the absense of @Controller to prevent this controller
// from being discovered by DefaultAnnotationHandlerMapping
public class FooController {
    @RequestMapping("/list") public String list(...) { ... }
    @ReqeustMapping("/save") public String save(...) { ... }
}

<bean 
    class = "org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping" />

<bean name = "/foo" class = "FooController" />
<bean name = "/bar" class = "FooController" />

在这个例子中的两个实例FooController手柄/foo/list/foo/save/bar/list/bar/save分别。

即将发布的Spring 3.1将具有改进的Spring 3.1架构(Spring 3.1 M2:Spring
MVC增强功能
),该架构似乎更加灵活,尽管我尚未对其进行检查。