2011-09-13 48 views
4

當Spring MVC的應用使得控制器我每次都指定
的新方法我想從春天的形式通過一項新的類的實例:
春季形式控制器泛化

@RequestMapping(method=RequestMethod.POST) 
public String mainPost(@Valid MyClass myClass, 
     BindingResult result, Model model) { 
    // do the same stuff each time here 
} 

所以我需要寫一個方法爲我的應用程序
中的每個可能的MyClass,可以傳遞給控制器​​,但所有這些方法做絕對相同的東西
(他們檢查錯誤,並將此對象傳遞給服務層)。

如何將所有這些方法合併爲一個?

我相信有一些類似的解決方案如下(不工作):

@RequestMapping(method=RequestMethod.POST) 
public <T> String mainPost(@Valid T myObject, 
     BindingResult result, Model model) { 
    // check errors and pass the object myObject to a service layer 
} 

回答

3

你不能有通用控制方法,但是您可以創建通用控制器:

public abstract class AbstractController<T> { 
    @RequestMapping(method=RequestMethod.POST) 
    public String mainPost(@Valid T myObject, 
      BindingResult result, Model model) { ... } 
} 

@Controller 
@RequestMapping("/myclass") 
public class MyClassController extends AbstractController<MyClass> { ... } 
+0

是,但它更簡單,但我希望有一些方法可以編寫控制器,以便在向模型中添加新類時不會添加更多控制器代碼。當我使用這樣一個AbstractController時,我仍然需要添加新的控制器類,當我添加新的類到模型中。 – tsds

+0

@tsds:如果您的泛型方法對不同的模型類使用相同的URL映射,它將如何知道它應綁定哪一個? – axtavt

+0

每個彈簧窗體都有commandName參數,所以當你發佈數據時,spring將構造該類的一個實例(在這個參數中指定),我認爲這個信息對於控制器來說已經足夠了,但是我對此並不是很有信心。 – tsds