我有一个控制器类注册一个自定义验证器,另一个控制器对其进行扩展并添加一个特定的验证器。
我无法在覆盖的方法参数上添加@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 ,.....){
...
}
}