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.
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
+1 funciona más información? –
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