No se puede hacer que el despachador de MVC de primavera funcione correctamente cuando el patrón de URL es un camino
-
27-10-2019 - |
Pregunta
Tengo una aplicación web que estamos aplicando Spring MVC solo para servicios de descanso en este momento. Queremos que aparezcan nuestros servicios de descanso ${contextPath}/rest/**
, sin embargo, cuando configuré esto, obtenemos:
No se encontró mapeo para la solicitud HTTP con URI [/myApp/REST/TestSvc/Message] en DispatcherServlet con el nombre 'Spring MVC Dispatcher Servlet'
Mi web.xml
posee:
<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
, que está bien y está registrando servicios a medida que se registran en el inicio.
<context:component-scan base-package="com.mycompany.myapp.rest" />
<mvc:annotation-driven />
Mi controlador se ve de la siguiente manera:
@Controller
@RequestMapping(value = "/rest/testService")
public class TestREST {
@RequestMapping(value="message", method=RequestMethod.GET)
public @ResponseBody String getMessage() {
return "REST working";
}
Si consigo el url-pattern
en web.xml
a *.rest y mi mapeo de solicitud para message
a message.rest
funciona.
Solución
El problema es probable que haya repetido el /rest
prefijo en ambos web.xml
y @RequestMapping
. Debería estar en uno o en cualquiera, pero no en ambos, por ejemplo
<url-pattern>/rest</url-pattern>
y
@RequestMapping(value = "/testService")
Los caminos sobre los cuales @RequestMapping
opera son las partes de la ruta que sigue la parte del servlet y su web.xml
Define la parte del servlet como /path
, asi que @RequestMapping
coincide con lo que quede, es decir /testService
.
En su forma actual, tu @RequestMapping
en realidad está coincidiendo con {contextPath}/rest/rest/testService
.
Otros consejos
Quizás podrías intentar cambiar a <url-pattern>/rest/*</url-pattern
> o <url-pattern>/rest*</url-pattern
> Y vea si eso ayuda.