问题描述:使用@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);
}
}
重启后再次提交,发现已经表单验证已经生效
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)