2011-09-13 45 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