6

我有一个 web 应用程序,我们目前仅将 spring MVC 应用于 REST 服务。我们希望我们的休息服务出现在 下${contextPath}/rest/**,但是当我设置它时,我们得到:

在名称为“Spring MVC Dispatcher Servlet”的 DispatcherServlet 中找不到具有 URI [/myapp/rest/testSvc/message] 的 HTTP 请求的映射

我的web.xml有:

<servlet>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/spring/servlet-context.xml
    </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <url-pattern>/rest</url-pattern>
</servlet-mapping>

servlet-context.xml,这很好,并且正在注册服务,因为它们在启动时注册。

<context:component-scan base-package="com.mycompany.myapp.rest" />
<mvc:annotation-driven />

我的控制器如下所示:

@Controller
@RequestMapping(value = "/rest/testService")
public class TestREST {
    @RequestMapping(value="message", method=RequestMethod.GET)
    public @ResponseBody String getMessage() {
        return "REST working";
    }

如果我将url-patterninweb.xml转换为 *.rest 并且我的请求映射messagemessage.rest它的工作。

4

2 回答 2

25

问题很可能是您在和/rest中都重复了前缀。它应该在一个或其中之一中,但不能同时在两者中,例如web.xml@RequestMapping

<url-pattern>/rest</url-pattern>

@RequestMapping(value = "/testService")

操作的路径@RequestMapping是 servlet 部分之后的路径部分,您web.xml将 servlet 部分定义为/path,因此@RequestMapping与剩下的部分匹配,即/testService

在其当前形式中,您@RequestMapping实际上是匹配{contextPath}/rest/rest/testService.

于 2011-03-20T10:49:01.147 回答
7

也许您可以尝试更改为<url-pattern>/rest/*</url-pattern> 或<url-pattern>/rest*</url-pattern> 看看是否有帮助。

于 2011-03-20T07:55:08.470 回答