在Spring中,如何指定BindingResult实现

时间:2012-12-20 12:49:30

标签: java spring spring-mvc

我想在控制器中指定BindingResult的实现类型。有没有办法做到这一点?目前,Spring似乎必须确定实现类型本身(恰好是BeanPropertyBindingResult)。我怀疑有一个配置,我在某处丢失,或者我只需要在Controller的方法签名中指定实际类型。

示例:

/**
 * {@inheritDoc}
 */
@Override
public ModelAndView continue(@ModelAttribute("model") @Valid final T model, final BindingResult results) { ... }

2 个答案:

答案 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){
}