2011-07-04 29 views
9

Spring中是否有一种方法可以为每个方法使用两个具有不同参数的不同url?Spring MVC - 请求映射,两个具有两个不同参数的网址

下面是伪代码

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

在ULR1在一些其他的控制器映射为

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

回答

14

更新:看起来你的问题是完全不同的。

不,你不能在不同的控制器中有不同的参数。它没有多大意义 - url指定一个资源或动作,并且它不能在两个控制器(它们表示不同的行为)中以完全相同的方式命名。

有两个选项:根据请求PARAM

  • 使用不同的网址
  • 用在其它控制器,其分派给不同的控制器(其被注入)的一种方法。

原来的答复:

不可以,但你可以有两种方法做同样的事情:

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

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

如果我没有理解错的,和你想的一样ModelAttribute,然后简单地:

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

最后 - 如果你需要不同的请求参数,您可以使用@RequestParam(required=false)列出所有可能的参数。

+0

,所以我不能避免重复的代码? – svlada

+0

@svlada你可以将它放在'foobar'方法中来避免它。但是,你需要不同的模型属性,或者你只需​​要不同的网址? – Bozho

+0

我需要具有不同参数的不同网址。 – svlada

2

您可以提供多个映射为您处理这样

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

但是如果你想为每个映射使用不同的参数,那么你必须提取你的方法。

0

像这样的事情

@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; 
} 
相关问题