2011-09-18 12 views
5

Estoy usando Spring 3.0.5 con <context:component-scan> y @RequestMapping anotaciones en mis controladores. Esto funciona, y las URL se registran mediante el escaneo del paquete.<context: component-scan> no recogiendo mis @RequestMappings si las asignaciones del controlador definidas en XML

Pero hay un problema cuando tengo una asignación de controlador definida en la configuración XML. Las anotaciones @RequestMapping ya no se recogen.

He aislado el problema en una aplicación simple.

Si tengo el siguiente controlador:

package test.pack.age; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class TestController { 
    @RequestMapping(value="/test") 
    public String showTestPage() { 
     return "testPage"; 
    } 
} 

y la siguiente configuración:

<context:component-scan base-package="test.pack.age" /> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

la aplicación funciona correctamente y el URL /test se registra y funciona correctamente.

18/09/2011 20:02:55 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping INFO Mapped URL path [/test] onto handler 'testController' 
18/09/2011 20:02:55 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping INFO Mapped URL path [/test] onto handler 'testController' 

Pero si agrego una asignación de controlador al XML, ya no funciona. Incluso algo tan simple como esto:

<bean id="handlerMappings" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" /> 

que básicamente no hace nada, y el <context:component-scan> ya no registra mi URL.

Necesito un mapeo de controlador adicional para algunos controladores (de terceros) que no puedo anotar, pero al agregarlo rompe todos mis @RequestMapping s.

¿Es esto normal? ¿Un insecto? (No puedo cambiar la versión de Spring)

¿Echo de menos algo?

Respuesta

4

¿Es esto normal? ¿Un insecto? (No puedo cambiar la versión de primavera)

Me estoy perdiendo algo?

me faltaba algo: D. Encontrado esta enterrado en JavaDocs del resorte por DefaultAnnotationHandlerMapping:

NOTA: Si define granos HandlerMapping personalizados en su contexto DispatcherServlet, es necesario agregar un grano DefaultAnnotationHandlerMapping de forma explícita, ya que los granos de HandlerMapping personalizada sustituyen a las estrategias de mapeo por defecto.

añadido esto a mi XML de configuración y ahora todo funciona:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
0

No estoy seguro de por qué su anotación Controller ya no está siendo recogida, pero creo que su problema se encuentra en el id que proporciona su SimpleUrlHandlerMapping. Debe ser handlerMapping.

Cuestiones relacionadas