当url模式是路径时,无法让Spring MVC调度程序正常工作

时间:2011-03-20 07:44:08

标签: java spring spring-mvc spring-3

我有一个网络应用程序,我们目前正在为REST服务应用spring MVC。我们希望我们的休息服务显示在${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-pattern中的web.xml改为* .rest,并将message的请求映射设置为message.rest,则可以正常工作。

2 个答案:

答案 0 :(得分:25)

问题可能是您在/restweb.xml中重复了@RequestMapping前缀。它应该是一个或两个,但不是两个,例如

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

@RequestMapping(value = "/testService")

@RequestMapping操作的路径是servlet部分后面的路径的一部分,而web.xml将servlet部分定义为/path,因此@RequestMapping匹配反对剩下的东西,即/testService

在目前的格式中,您的@RequestMapping实际上与{contextPath}/rest/rest/testService匹配。

答案 1 :(得分:7)

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