2011-07-04 102 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; 
} 
相關問題