且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Spring MVC验证器注释+自定义验证

更新时间: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.