天天看點

SpringMVC表單驗證 @Validated不生效,org.springframework.validation.BeanPropertyBindingResult: 0 errors

問題描述:使用@Validated進行表單驗證,發現不生效。進入Controller後BindingResult:org.springframework.validation.BeanPropertyBindingResult: 0 errors。

SpringMVC表單驗證 @Validated不生效,org.springframework.validation.BeanPropertyBindingResult: 0 errors

問題定位:

表單送出,在org.springframework.validation.DataBinder#validate(java.lang.Object...)方法中打個斷點,發現getValidators()方法的傳回值size為0,是以無法進入表單驗證的方法validator.validate(getTarget(), getBindingResult());

SpringMVC表單驗證 @Validated不生效,org.springframework.validation.BeanPropertyBindingResult: 0 errors

解決方法:

項目中注冊校驗器LocalValidatorFactoryBean或者自定義一個校驗器,然後在“相應的”Controller中指定校驗器。

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
</bean>
           
@Autowired
private LocalValidatorFactoryBean validator;

@InitBinder
public void initBinder(DataBinder binder) {
    if (binder.getTarget() instanceof ShopCargo) {
        binder.setValidator(validator);
    }
}
           

重新開機後再次送出,發現已經表單驗證已經生效

SpringMVC表單驗證 @Validated不生效,org.springframework.validation.BeanPropertyBindingResult: 0 errors
SpringMVC表單驗證 @Validated不生效,org.springframework.validation.BeanPropertyBindingResult: 0 errors