更新时间:2022-12-11 10:55:47
我知道这是一个古老的问题但对于googlers来说......
I know this is a kind of old question but, for googlers...
你应该使用 addValidators
而不是 setValidator
。如下所示:
you should use addValidators
instead of setValidator
. Like following:
@InitBinder
protected void initBinder(final WebDataBinder binder) {
binder.addValidators(yourCustomValidator, anotherValidatorOfYours);
}
PS: addValidators
接受多个参数(省略号)
PS: addValidators
accepts multiple parameters (ellipsis)
如果你签出 org.springframework.validation.DataBinder
的来源,你会看到:
if you checkout the source of org.springframework.validation.DataBinder
you will see:
public class DataBinder implements PropertyEditorRegistry, TypeConverter {
....
public void setValidator(Validator validator) {
assertValidators(validator);
this.validators.clear();
this.validators.add(validator);
}
public void addValidators(Validator... validators) {
assertValidators(validators);
this.validators.addAll(Arrays.asList(validators));
}
....
}
如您所见 setValidator
清除现有(默认)验证器,因此 @Valid
注释将无效预期。
as you see setValidator
clears existing (default) validator so @Valid
annotation won't work as expected.