2011-10-31 57 views
0

我想使用验证而不是网络控制器。假设我有一个Person类弹簧验证不在网络控制器内

public class Person { 
    private String name; 
    private String surname; 
    //getters and setters 
... 
} 

另外我有一个验证器类:

public class PersonValidator implements Validator { 

    @Override 
    public boolean supports(Class<?> clazz) { 
    return Person.class.equals(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "name.empty"); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surname", 
     "surname.empty"); 
    } 
} 

我怎么可以在控制台应用程序中使用这个验证例如?或者验证仅适用于春季的Web应用程序?

回答

1

您可以在控制台应用程序中使用验证工具。您只需拨打ValidationUtils.invokeValidator(validator, object, errors)即可。您主要关注的是有一个合适的Errors实例。您可能最终会使用BeanPropertyBindingResult或子类AbstractErrors

您可能知道,但您应该咨询Spring referencejavadoc。在未经测试的代码

粗略估计:

Person person = new Person(); 
Errors errors = new BeanPropertyBindingResult(person, "person"); 
ValidationUtuls.invokeValidator(new PersonValidator(), person, errors); 
if (errors.hasErrors()) { ... } 

出于兴趣,你为什么要使用Spring验证优先于javax.validation?我发现使用javax.validaton/JSR-303 API通常更容易。 Hibernate Validator是参考实现和Spring integrates with JSR-303