【发布时间】:2011-07-13 19:14:41
【问题描述】:
我正在使用在 Tomcat Apache 6.0 环境中运行的 Spring 3.0 开发 RESTful 服务。 Spring DispatcherServlet 配置在“/spring/*”。 Spring servlet 处理多个客户端并在应用程序中有许多控制器。我正在为 REST 服务添加一个新的控制器。我希望我的所有控制器类都具有像“ws”(网络服务)这样的标识前缀,以便资源的完整 URL 如下所示:http://<server>:<port>/<context>/spring/ws/service1
我发现 Spring 注释的唯一方法是像这样使用 @RequestMapping:
@Controller
@RequestMapping("/ws/service1")
public class Service1 {
@RequestMapping(method=RequestMethod.GET)
@ResponseBody
public String getHtml() { ... }
....
}
但由于我有几十个类,我不想在每个类中都加上“/ws”前缀。因此,如果另一个开发人员添加了新服务,他不必记住放置此前缀,而且如果我们决定将前缀名称从“/ws”更改为其他名称,我不必更改所有文件。我发现@RequestMapping 注解只适用于方法或类,而不适用于包级别。
有什么方法可以配置我的所有 REST 控制器都使用前缀访问?
请注意,我无法更改 Spring servlet 的 web.xml URL 映射,因为还有其他控制器正在使用该 URL 运行。
【问题讨论】:
-
你的最后一句话很关键——你能详细解释一下“其他控制器”的含义吗?
-
我的 Spring servlet 服务于 Flex 客户端,为此我使用 BlazeDS 控制器。 Tomcat 服务器本身也必须提供一些静态内容。 RESTful 控制器是除此之外的。所以我无法将 Spring servlet url 映射到“/*”或“/ws/*”。
标签: spring url rest controller