2011-03-20 18 views
6

Tengo una aplicación web en la que estamos aplicando Spring MVC solo para servicios REST en este momento. Queremos que nuestros servicios de descanso a aparecer bajo ${contextPath}/rest/**, sin embargo, cuando me puse esto, obtenemos:No se puede hacer que el despachador Spring MVC funcione correctamente cuando el patrón de url es una ruta

ninguna asignación encontró para la petición HTTP con URI [/ miaplicacion/descanso/testSvc/mensaje] en DispatcherServlet con el nombre 'Spring MVC Dispatcher servlet'

Mi web.xml tiene:

<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 los servicios a medida que se registraron en el arranque.

<context:component-scan base-package="com.mycompany.myapp.rest" /> 
<mvc:annotation-driven /> 

Mi controlador busca 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 Cahnge la url-pattern en web.xml a * .RESTO y mi solicitud de mapeo para message a message.rest funciona.

+0

¿Has probado '/ rest *'? –

+0

Pensé que podría ser algo así también, sin embargo, desafortunadamente ese no es el caso, el servlet realmente está recibiendo la solicitud y por eso se registra, pero no se corresponde correctamente. –

Respuesta

25

Es probable que haya repetido el prefijo /rest en web.xml y @RequestMapping. Debe estar en uno o ambos, pero no en ambos, p.

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

y

@RequestMapping(value = "/testService") 

Los caminos sobre los cuales @RequestMapping opera son las partes del camino que sigue la parte de servlets, y su web.xml define la parte de servlets como /path, por lo @RequestMapping partidos contra lo que queda , es decir, /testService.

En su forma actual, su @RequestMapping realmente coincide con {contextPath}/rest/rest/testService.

+3

Saludos amigo, lo intenté pero no pude hacerlo funcionar, problema por el cual tuve '/rest', lo cambié a '/ rest/*' y está funcionando bien ahora. Entonces la combinación de los dos me estaba jodiendo. Montones de gracias. –

+0

¿hay alguna fuente en la documentación al respecto? – dhblah

7

Quizás podría intentar cambiar a <url-pattern>/rest/*</url-pattern> o <url-pattern>/rest*</url-pattern> y ver si eso ayuda.

+0

Desafortunadamente eso tampoco funciona. Puedo decir que el despachador está recibiendo la solicitud ya que está registrando el error. Supongo que si no recibiera la solicitud, ¿no se registraría correctamente?/rest * no llega al servlet, aunque/rest/* does. –

+1

Resulta que '/ rest/*' es requerido en combinación con la respuesta de skaffman, yo voté por esto, gracias amigo. –

Cuestiones relacionadas