estoy teniendo problemas en curso de configurar mi controlador de primavera para asignar a determinadas direcciones URL, y lo tengo a un escenario bastante simple, que creo que debería estar trabajando:Spring MVC - Mapeo controlador de direcciones URL utilizando Anotaciones
I estoy configurando mi clase de controlador utilizando anotaciones, y se ve de la siguiente manera:
@Controller
@RequestMapping(value = "/question/**")
public class QuestionController
{
/**
* Method to build users questions list
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping("/list")
public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws Exception{
//Display Questions List
}
}
no hay ninguna configuración adicional del controlador, simplemente tengo la configuración <mvc:annotation-driven/>
y la configuración <context:component-scan>..
en mi config webmvc, por lo que el controlador está automáticamente detectado
Ahora, cuando navego a /question/list
, las aplicaciones no pueden encontrar el recurso y aparece un error ResourceNotFound
. Sin embargo, si navego a /question/question/list
, la aplicación carga la página que esperaría correctamente.
¿Alguna idea de por qué esto está dirigiendo al método usando /question/question/list
?
Después de esto he intentado añadir la configuración de mi config webmvc para obligar a todos los RequestMappings
utilizar los parámetros alwaysUseFullPath = true, lo hice de la siguiente manera:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="3">
<property name="alwaysUseFullPath" value="true" />
</bean>
Esta vez, cuando navego a/question/list aún no carga la página correcta, pero los registros muestran que Spring al menos identifica el controlador correcto, pero simplemente no encuentra el método (antes ni siquiera encontró el controlador basado en la URL):
2011-08-09 18:02:27,885 [http-8080-3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Matching patterns for request [/question/list] are [/question/**/list/, /question/**/list, /question/**/, /question/**]
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Mapping [/question/list] to handler '[email protected]23'
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - Last-Modified value for [/microblog/question/list] is: -1
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'microblog' processing GET request for [/microblog/question/list]
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Resolving exception from handler [[email protected]23]: org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: No matching handler method found for servlet request: path '/list', method 'GET', parameters map[[empty]]
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Resolving to view 'resourceNotFound' for exception of type [org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException], based on exception mapping [.NoSuchRequestHandlingMethodException]
2011-08-09 18:02:27,887 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Exposing Exception as model attribute 'exception'
Me parece que es algo relativamente simple lo que intento lograr al conectar un Controlador a una URL usando las anotaciones, pero no está funcionando correctamente - alguien se ha encontrado con esto o ha visto errores flagrantes ¿de mi parte?
ACTUALIZACIÓN
me han hecho algunos progresos en mis investigaciones.
En mi web.xml que definen la correlación de servlet de la siguiente manera:
<servlet-mapping>
<servlet-name>microblog</servlet-name>
<url-pattern>/question/*</url-pattern>
</servlet-mapping>
Si quito este mapeo de servlets, (todavía tengo un servlet-mapping que mapea todas .html
al mismo servlet) y el cambio la URL que estoy usando para /question/list.html
luego funciona (también cambio la asignación de nivel de método de la anotación @RequestMapping
en mi método list()
en el controlador de pregunta al /list.html
).
En resumen:
tengo correlación de servlet
/question
al contexto Webtengo otra asignación de
/question
a laQuestionController
Tengo un mapeo nivel de método para mi lista método de
/list
Ahora no quiero que mis URL terminen en .html para estos casos. ¿Alguien sabe cómo puedo solucionar este problema? Parece como si tal vez el servlet-mapping se estropea el emparejado /question
cadena a partir de la URL (de ahí /question/list
no trabajar, pero trabajar /question/question/list
)
conjunto/ url-pattern> para direcciones URL sin html –
Gengzu
Si uso eso, entonces redirige toda mi imagen, recursos CSS, etc. al controlador, por lo que no los encuentra (todas mis imágenes están en/images/.. etc) - así que cuando cargué la página no hay imágenes ni estilo css. ¿Alguna idea de cómo puedo asignar solo las URL al controlador sin la necesidad de duplicar la ruta en la URL? – rhinds
Mueva sus archivos a la carpeta de arriba, no a la carpeta WEB-INF. – Gengzu