覆盖控制器方法中的Spring MVC自定义验证不起作用

时间:2018-10-30 13:21:48

标签: spring spring-mvc

我有一个控制器类注册一个自定义验证器,另一个控制器对其进行扩展并添加一个特定的验证器。

我无法在覆盖的方法参数上添加@Valid注释,因为它无法编译(违反了Liskov原理)

为什么当我在SpecificController中使用重写方法时,未调用验证程序?该如何解决?

@Controller
public class SuperController {
    @Inject
    private ValidatorFromSuper validatorFromSuper;

    @InitBinder
    public void initBinder(HttpServletRequest request, WebDataBinder binder){
        registerValidators(binder);
    }

    protected void registerValidators(WebDataBinder binder) {
        binder.setValidator(validatorFromSuper);
    }

    @RequestMapping(...)
    public String handleCreation(@Valid @ModelAttribute("myWebModel") MyWebModel myWebModel, 
                                        BindingResult bindingResult ,.....){
           ...
    }
}


@Controller
public class SpecificController extends SuperController{
    @Inject
    private SpecificValidator specificValidator;

    @Override   
    protected void registerValidators(WebDataBinder binder) {
        super.registerValidators(binder);
        binder.addValidators(specificValidator);
    }

    @Override
    public String handleCreation(@ModelAttribute("myWebModel") MyWebModel myWebModel, 
                                        BindingResult bindingResult ,.....){
           ...
    }

}

0 个答案:

没有答案