弹簧验证不在Web控制器内部

时间:2011-10-31 23:36:43

标签: spring

我想使用验证而不是网页控制器。假设我有一个人类

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 个答案:

答案 0 :(得分: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