Spring MVC @RequestMapping ne fonctionne pas

J'ai un étrange scénario dans lequel mon contrôleur n'est pas appelée à moins que j'ai la carte le répartiteur servlet /* web.xml. J'ai défini un contrôleur avec un RequestMapping:

@Controller  
public class UserController {

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

Et un contexte d'application:

<?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" /> 

Enfin, c'est mappée dans 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>

Cela fonctionne comme prévu c'est à dire que je peux faire des demandes de /le reste/utilisateurs. Cependant si je change le web.xml cartographie:

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

- Je obtenir un MVC erreur:

AVERTIR servlet.PageNotFound: Aucune correspondance trouvée pour la requête HTTP avec l'URI
[/repos/users] dans DispatcherServlet avec le nom "rest-servlet'.

Il semble vraiment étrange parce que l'erreur indique que la demande est mappé à la dispatcher-servlet, pourtant, la seule chose qui a changé, c'est la servlet de cartographie.

Quelqu'un d'autre a rencontré ce?

OriginalL'auteur | 2012-04-20