Tengo un extraño escenario en el que mi controlador no se invoca a menos que asigne el servlet del operador a/* en web.xml. He definido un controlador con una RequestMapping:Spring MVC @RequestMapping no funciona
@Controller
public class UserController {
@RequestMapping(value = "/rest/users", method = RequestMethod.GET)
public ModelAndView getUsers(HttpServletRequest request) throws RestException {
...
}
}
Y un contexto de aplicación:
<?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" />
Por último, esta es mapeado en 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>
esto funciona como se esperaba, es decir que puede hacer solicitudes a/descansar/usuarios. Sin embargo si cambio de la asignación a web.xml:
<servlet-mapping>
<servlet-name>rest-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
consigo un error MVC:
WARN servlet.PageNotFound: No mapping found for HTTP request with URI [/rest/users] in DispatcherServlet with name 'rest-servlet'.
Parece muy extraño, porque el error indica que la solicitud se asigna al despachador-servlet , sin embargo, lo único que ha cambiado es el mapeo de servlets.
¿Alguien más ha encontrado esto?
Gracias Anton, el único El problema que enfrento es que tengo otros servlets definidos junto con el servlet despachador de MVC (cosas de GWT, etc.), así que no quiero enrutar todo a través de él. Supongo que tendré que mirar algunas opciones de reescritura de URL –
Puede definir un grupo de en la declaración de servlet. En su escenario, puede asignar Spring MVC a/rest y su controlador a/users –
Anton
Entendido ... tiene mucho sentido ahora, gracias por su ayuda –