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

問題定位:
表單送出,在org.springframework.validation.DataBinder#validate(java.lang.Object...)方法中打個斷點,發現getValidators()方法的傳回值size為0,是以無法進入表單驗證的方法validator.validate(getTarget(), getBindingResult());
解決方法:
項目中注冊校驗器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);
}
}
重新開機後再次送出,發現已經表單驗證已經生效