Spring 形式:select bean 根据参数

Spring Form: select bean according to params

我有一个关于 Spring 表格的问题(具体来说是 Thymeleaf)。
我知道我一次只能使用一个 bean 来支持 Spring 中的表单,所以我认为让控制器 select 哪个 bean 应该绑定到表单会很好,具体取决于发送哪些参数。但是我想知道我是否可以以某种方式将参数仅映射到 ModelAttribute 本身,而不是为每个新参数编写一个新的 RequestMapping。

我想到了这样的事情:

@Controller
public class FormController{

@ModelAttribute("bean", params={"type=bean1"}) //this declaration is invalid
public IBean loadEmptyModelBean(){
    return new Bean1();
}
@ModelAttribute("bean", params={"type=bean2"})
public IBean loadEmptyModelBean(){
    return new Bean2();
}

//..

@RequestMapping(method=RequestMethod.GET)
public String showForm(IBean bean){     
    //..
}

@RequestMapping(method=RequestMethod.POST, params={"validate"})
public String validate(@Valid IBean bean, BindingResult result){
    List<ObjectError> errors = bean.validate();
    for(ObjectError e: errors){
        result.addError(e);
    }

    //redirecting, etc
}

}

如您所见,我会根据参数实例化不同的 Bean,并且仍然只对每个 GET 和 POST 过程使用一种方法,因为 IBean 将是一个接口,它强制所有 Beans 实现一个验证()方法。

我几天前才开始使用 Spring,想知道是否有人知道解决这个问题的方法,谁比我更有经验:)
我搜索了答案,但找不到解决我的特定问题的方法。我想,我可以实现很多处理程序,它们由参数过滤,但那将是非常多余的,因为每个方法都必须做同样的事情(调用 validate() 方法并将新错误添加到 BindingResult)。 ..我认为这不是一个好的解决方案,待定。
希望我的问题听起来不傻^^

提前感谢您的时间和精力。

Spring 方法是使用不同的 @RequestMapping 注释方法调用私有方法 完成工作 :

@RequestMapping(method=RequestMethod.POST, params={"validate", "type=bean1"})
public String validate1(@Valid Bean1 bean, BindingResult result){
    return doValidate(bean, result);
}
@RequestMapping(method=RequestMethod.POST, params={"validate", "type=bean2"})
public String validate2(@Valid Bean2 bean, BindingResult result){
    return doValidate(bean, result);
}
private String doValidate(IBean bean, BindingResult result){
    List<ObjectError> errors = bean.validate();
    for(ObjectError e: errors){
        result.addError(e);
    }

    //redirecting, etc
}