Spring --- Validation

一) 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 PersonValidator implements 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. }
public class Person {
  private String name;
  private int age;
  // the usual getters and setters...
}
public class PersonValidator implements Validator {
  /**
  * This Validator validates just Person instances
  */
  public boolean supports(Class clazz) {
   return Person.class.equals(clazz);
  }
  public void validate(Object obj, Errors e) {
    ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
    Person p = (Person) obj;
    if (p.getAge() < 0) {
      e.rejectValue("age", "negativevalue");
    } else if (p.getAge() > 110) {
      e.rejectValue("age", "too.darn.old");
    }
  }
}

Spring的Validate策略就是一个类(Person)对应一个校验类(PersonValidator)。至于校验类的绑定,可以代码中显式的调用,也可以是采用annotation。个人比较推荐用annotation的方法。而如果在一个类的校验中需要用到另一个类的校验,我们可以这样写:
Java代码 复制代码 收藏代码
  1. public class CustomerValidator implements 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. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值