Spring --- Validation

来源:互联网 发布:烈焰龙城轮回数据 编辑:程序博客网 时间:2024/06/05 17:32
一) Validator接口
Spring的Validation功能设计很简单。使用Validator功能即可:
Java代码 复制代码 收藏代码
  1. public class Person {
  2. private String name;
  3. private int age;
  4. // the usual getters and setters...
  5. }
  6. public class PersonValidatorimplements Validator {
  7. /**
  8. * This Validator validates just Person instances
  9. */
  10. public boolean supports(Class clazz) {
  11. return Person.class.equals(clazz);
  12. }
  13. public void validate(Object obj, Errors e) {
  14. ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
  15. Person p = (Person) obj;
  16. if (p.getAge() < 0) {
  17. e.rejectValue("age", "negativevalue");
  18. } else if (p.getAge() >110) {
  19. e.rejectValue("age", "too.darn.old");
  20. }
  21. }
  22. }

Spring的Validate策略就是一个类(Person)对应一个校验类(PersonValidator)。至于校验类的绑定,可以代码中显式的调用,也可以是采用annotation。个人比较推荐用annotation的方法。而如果在一个类的校验中需要用到另一个类的校验,我们可以这样写:
Java代码 复制代码 收藏代码
  1. public class CustomerValidatorimplements Validator {
  2. private final Validator addressValidator;
  3. public CustomerValidator(Validator addressValidator) {
  4. if (addressValidator == null) {
  5. throw new IllegalArgumentException(
  6. "The supplied [Validator] is required and must not be null.");
  7. }
  8. if (!addressValidator.supports(Address.class)) {
  9. throw new IllegalArgumentException(
  10. "The supplied [Validator] must support the validation of [Address] instances.");
  11. }
  12. this.addressValidator = addressValidator;
  13. }
  14. /**
  15. * This Validator validates Customer instances, and any subclasses of Customer too
  16. */
  17. public boolean supports(Class clazz) {
  18. return Customer.class.isAssignableFrom(clazz);
  19. }
  20. public void validate(Object target, Errors errors) {
  21. ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName","field.required");
  22. ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surname","field.required");
  23. Customer customer = (Customer) target;
  24. try {
  25. errors.pushNestedPath("address");
  26. ValidationUtils.invokeValidator(this.addressValidator,customer.getAddress(), errors);
  27. } finally {
  28. errors.popNestedPath();
  29. }
  30. }
  31. }  
原创粉丝点击