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增强功能
),该架构似乎更加灵活,尽管我尚未对其进行检查。