2012-02-09 18 views
9

En Spring MVC 3, quiero manejar la misma url con dos clases de controlador diferentes, según el valor del parámetro url. @RequestMapping anotación incluso tiene dicho campo: params, y pensé siguientes sería dos asignaciones diferentes (yo uso la cartografía a nivel de clase):Cómo dividir el mapeo de solicitud de Spring MVC por el valor del parámetro

@RequestMapping(value = "/myurl", params = "name=val1") 

y

@RequestMapping(value = "/myurl", params = "name=val2") 

pero no es . Spring lanza una excepción para el segundo caso en que el controlador para /myurl ya esté asignado (en el primer caso).

¿Existe alguna solución precisa para dividir el mapeo de solicitudes por parámetro? Puede extender @RequestMapping o usar proxy como controlador y llamar a diferentes controladores según el parámetro ... ¿Alguna idea?

ACTUALIZACIÓN Esto funciona, pero sólo en el nivel de los métodos, no en el nivel de clase ... Esta voluntad:

@Controller 
@RequestMapping(value = "/myurl") 
public class Class123 { 

    @RequestMapping(value = {"edit.htm"}, params = "src=1") 
    public String open1(Map<String, Object> map) throws Exception {....} 

    @RequestMapping(value = {"edit.htm"}, params = "src=2") 
    public String open2(Map<String, Object> map) throws Exception {....} 
} 

esto no va a:

@Controller 
@RequestMapping(value = "/myurl", params = "src=1") 
public class Class123_1 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 


@Controller 
@RequestMapping(value = "/myurl", params = "src=2") 
public class Class123_2 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 

y me gustaría para dividir la lógica en diferentes clases.

+1

Eso debería funcionar. Lo he usado, funciona. Está sucediendo algo más que no nos has mostrado. Quizás algún otro controlador haya mapeado esa URL. – skaffman

+0

+1 funciona más información? –

+1

Hmm, quizás esto solo funciona para métodos en la misma clase. Sin embargo, no estoy seguro si eso es un error o no, aunque la documentación no lo menciona. ¿Quizás podría mantener los métodos en una clase, pero luego delegar en otra clase para mantener las implementaciones separadas? – skaffman

Respuesta

1

Parece una diferencia entre el uso de RequestMappingHandlerMapping (nuevo en Spring 3.1) frente a DefaultAnnotationHandlerMapping (la clase reemplazada por RequestMappingHandlerMapping).

Cuestiones relacionadas