2011-07-04 17 views
9

¿Es posible en Spring tener un método con dos URL diferentes con parámetros diferentes para cada método?Spring MVC - Asignación de solicitud, dos direcciones URL con dos parámetros diferentes

A continuación se muestra el pseudocódigo

@RequestMethod(URL1-param1, URL2-param2) 
public void handleAction(@ModelAttribute("A") A a, ...) { 
} 

Al mismo tiempo ULr1 se mapea en algún otro controlador como

@RequestMethod(URL1) 
public void handleAction1(@ModelAttribute("A") A a, ...) { 
} 

Respuesta

14

Actualización: Parece que su pregunta es completamente diferente.

No, no puede tener la misma url con diferentes parámetros en diferentes controladores. Y no tiene mucho sentido: la URL especifica un recurso o acción, y no puede nombrarse exactamente de la misma manera en dos controladores (que denotan comportamientos diferentes).

tiene dos opciones:

  • uso diferentes URLs
  • usar un método en un controlador de misc que despacha a los diferentes controladores (que se inyectan) en función de la solicitud PARAM.

Respuesta original:

No. Pero puede tener dos métodos que hacen lo mismo:

@RequestMethod("/foo") 
public void foo(@ModelAttribute("A") A a) { 
    foobar(a, null); 
} 

@RequestMethod("/bar") 
public void bar(@ModelAttribute("B") B b) { 
    foobar(null, b); 
} 

Si no he entendido bien, y desea que el mismo ModelAttribute, luego simplemente:

@RequestMapping(value={"/foo", "/bar"}) 

Y finalmente, si necesita diferentes parámetros de solicitud, puede usar @RequestParam(required=false) para enumerar todos los parámetros posibles.

+0

así que no puedo evitar la duplicación de código? – svlada

+0

@svlada lo evitas colocándolo en el método 'foobar'. ¿Pero necesitas diferentes atributos de modelo o solo necesitas diferentes URL? – Bozho

+0

Necesito diferentes URL con diferentes parámetros. – svlada

2

puede suministrar varias asignaciones para su manejador como esto

@RequestMapping(value={"", "/", "welcome"}) 
public void handleAction(@ModelAttribute("A") A a, ...) { } 

Pero si quiere usar parámetros diferentes para cada mapeo, entonces tiene que extraer su método.

0

Algo como esto

@RequestMapping(value={"URL1"}, method=RequestMethod.POST) 
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
    return helperSubmit(); 
} 

@RequestMapping(value={"URL2"}, method=RequestMethod.POST) 
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
    return helperSubmit(); 
} 

private helperSubmit() { 
    return "redirect:" + someUrl; 
} 
Cuestiones relacionadas