Java Spring形式控制器泛化

Java Spring形式控制器泛化,java,forms,spring,controller,Java,Forms,Spring,Controller,为spring mvc应用程序制作控制器时,我必须指定 每次我想从spring窗体传递一个新的类实例时,都需要一个新方法: @RequestMapping(method=RequestMethod.POST) public String mainPost(@Valid MyClass myClass, BindingResult result, Model model) { // do the same stuff each time here } 因此,我需要为应用

为spring mvc应用程序制作控制器时,我必须指定
每次我想从spring窗体传递一个新的类实例时,都需要一个新方法:

@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)
公共字符串mainPost(@Valid T myObject,
BindingResult(结果,模型){
//检查错误并将对象myObject传递给服务层
}

您不能拥有通用控制器方法,但可以创建通用控制器:

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> { ... }
公共抽象类AbstractController{
@RequestMapping(method=RequestMethod.POST)
公共字符串mainPost(@Valid T myObject,
BindingResult结果,模型){…}
}
@控制器
@请求映射(“/myclass”)
公共类MyClassController扩展了AbstractController{…}

是的,它要简单得多,但我希望有一种编写控制器的方法,允许您在向模型添加新类时不添加更多控制器代码。当我使用这样一个AbstractController时,当我将新类添加到模型中时,我仍然需要添加新的控制器类。@tsds:如果您的泛型方法对不同的模型类使用相同的URL映射,它怎么知道应该绑定哪一个?每个spring表单都有commandName参数,所以,当您发布数据spring构造该类的实例(在该参数中指定)时,我认为这些信息对于controller来说已经足够了,但我对此不是很有信心。
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> { ... }