这里我有一个我能想象的最基本的弹簧验证器的样本:-)。由于它是桌面应用程序,我没有运行容器,应该在某些时刻调用validate。
是否有任何实用程序以与弹簧容器相同的方式调用validate方法?或者调用验证就足够了?在这种情况下,我必须通过验证的Errors
对象的具体实现是什么?
这是一个例子(主要是装饰性的):
首先我有一个Person类,其中包含Stirng firstName属性和String secondName属性:
public static class Person {
public static final String PROP_FIRSTNAME = "firstName";
String firstName;
public static final String PROP_SECONDNAME = "secondName";
String secondName;
public String getFirstName() {return firstName;}
public void setFirstName(String firstName) {this.firstName = firstName;}
public String getSecondName() {return secondName;}
public void setSecondName(String secondName) {this.secondName = secondName;}
}
然后我有一个PersonValidator,它只是检查Person是否有一个非null的firstName:
public static class PersonValidator implements Validator {
public boolean supports(Class<?> clazz) {
return Person.class.isAssignableFrom(clazz);
}
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, Person.PROP_FIRSTNAME , "First name must be ");
}
}
好的,现在问题是:如何使用它?
public static void main(String [] args) {
Person p = new Person();
PersonValidator v = new PersonValidator();
//HOW TO PERFORM VALIDATION?
//v.validate(p, null)
}
答案 0 :(得分:3)
答案 1 :(得分:-2)
您需要做的就是创建一个BindException
对象,其中包含要验证的对象和完全限定的类名。
然后使用ValidationUitls.invokeValidator()
方法验证bean here。
以下是一些示例代码,用于阐明我的意思:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = context.getBean(Person.class);
PersonValidator personValidator = context.getBean(PersonValidator.class);
BindException errors = new BindException(person, Person.class.getName());
ValidationUtils.invokeValidator(personValidator, person, errors);
if(errors.hasErrors()){
System.out.println(errors.getAllErrors());
}