No se puede hacer que el despachador de MVC de primavera funcione correctamente cuando el patrón de URL es un camino

StackOverflow https://stackoverflow.com/questions/5367309

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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top