在我们的项目中,我们采用了稍微不同的方法。我们也在使用 Spring 3.1,并且我们有两个带有验证和自定义验证注释的 bean。我们的方法可能适用于您的场景,也可能不适用于您的场景,因为在迁移到 Spring 3.1 之前,我不确定您最初使用的方法,但这里有。
当我们需要自定义验证时,我们实现 org.springframework.validation.Validator 类,而不是扩展 LocalValidatorFactoryBean。所以这个实现执行它自己的自定义代码并调用 Spring 的默认验证,它通过一个自动装配到我们的自定义验证器中的 bean 公开。这是验证器代码:
@Component("myValidator")
public class MyValidator implements Validator {
@Autowired
private Validator springValidator;
@Override
public boolean supports(Class<?> clazz) {
return MyObject.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object object, Errors errors) {
MyObject myObject = (MyObject) object;
// invoke spring default validator so validation annotations are processed
springValidator.validate(myObject, errors);
// custom validation
....
我们在 spring xml 文件中声明了以下 bean:
<bean id="springValidator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
通过上述实现,需要调用验证的类将通过调用 validator.validate(Object object, Errors errors) 来完成。再次,这就是为什么我不确定我们项目中采用的方法是否适用于您的方法,因为我不确定您是否使用相同的 validate(Object, Errors) 方法。
无论如何,希望它有所帮助。