我想在控制器中指定BindingResult的实现类型。有没有办法做到这一点?目前,Spring似乎必须确定实现类型本身(恰好是BeanPropertyBindingResult)。我怀疑有一个配置,我在某处丢失,或者我只需要在Controller的方法签名中指定实际类型。
示例:
/**
* {@inheritDoc}
*/
@Override
public ModelAndView continue(@ModelAttribute("model") @Valid final T model, final BindingResult results) { ... }
答案 0 :(得分:1)
您不需要自定义 BindingResult 来执行您想要的操作。您需要实现 BindingErrorProcessor 并在 WebDataBinder 中使用它。它负责将错误添加到 BindingResult ,并允许您使用自定义错误实施。以下是在控制器中使用它的方法......
@Controller
public class MyFormController {
...
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setBindingErrorProcessor(new MyCustomBindingErrorProcessor());
}
}
混合绑定和验证是不好的做法,类应该只有一个责任。你不应该在BindingResult本身进行验证。
答案 1 :(得分:-1)
您必须在@ModelAttribute
前面添加ModelAndView,如:
public ModelAndView continue(ModelAndView model, @ModelAttribute("model") ObjectType objectName){
}