2012-04-20 10 views
9

ディスパッチャーサーブレットをweb.xmlの/ *にマップしない限り、コントローラが呼び出されないという奇妙な状況があります。私はRequestMappingとコントローラを定義している:Spring MVC @RequestMapping not working

@Controller 
public class UserController { 

    @RequestMapping(value = "/rest/users", method = RequestMethod.GET) 
    public ModelAndView getUsers(HttpServletRequest request) throws RestException { 
     ... 
    } 
} 

とアプリケーション・コンテキスト:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> 

    <context:component-scan base-package="com.test.rest.controller" /> 

は、最後にこれはweb.xmlにマッピングされている:私はつまり、予想通り

<servlet> 
    <servlet-name>rest-servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/restContext.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>rest-servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

これは動作します/ rest/usersにリクエストを行うことができます。私はweb.xmlのマッピングを変更する場合は:

<servlet-mapping> 
    <servlet-name>rest-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

私はMVCのエラーを取得:

WARN servlet.PageNotFound: No mapping found for HTTP request with URI [/rest/users] in DispatcherServlet with name 'rest-servlet'.

エラーは、要求がディスパッチャ・サーブレットにマッピングされていることを示しているので、それは本当に奇妙なよう、変更された唯一のものはサーブレットのマッピングです。

他に誰かがこれに遭遇しましたか?

答えて

16

Dispatcherサーブレットは、Spring MVCのメイン・サーブレットです。アプリケーションに送られるすべての要求を処理し、独自のルーティングエンジンを使用してコントローラにディスパッチします。 (最初の設定が有効である)ディスパッチサーブレットがすべての着信要求を処理できるようにする

+0

おかげアントン、のみ - あなたは

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

に変更する場合は、あなたの要求は、このrest/rest/users

一般的なパターンのようにする必要があります私が直面する問題は、MVCディスパッチャーサーブレット(GWTなど)と一緒に定義された他のサーブレットがあるため、すべてをルーティングする必要はありません。私はいくつかのURL書き換えオプションを見なければならないと思います。 –

+1

サーブレット宣言で束を定義することができます。あなたのシナリオでは、Spring MVCを/ restにマップし、コントローラを/ usersに割り当てることができます。 – Anton

+0

これは完璧な意味があります。助けてくれてありがとうございます –