Пример #1
0
  private static final <T> ConstraintViolation<T> validateField(
      T bean, Field field, Object fieldValue, Annotation constraintAnno) {
    boolean isValid = true;
    // 获取该注解验证规则上的所有验证器,并依次进行调用验证
    ConstraintValidator[] validators =
        ValidationContextCache.getConstraintValidators(constraintAnno);
    if (validators == null || validators.length == 0) {
      return null;
    }

    for (ConstraintValidator validator : validators) {
      if (validator == null) {
        continue;
      }

      isValid &= validator.isValid(bean, fieldValue, constraintAnno, field);
      if (!isValid) {
        return new ConstraintViolation<T>(
            bean, field.getName(), fieldValue, getMessage(constraintAnno));
      }
    }

    return null;
  }
Пример #2
0
  /**
   * 验证JavaBean
   *
   * @param bean 需要验证的JavaBean对象
   * @param fields 需要可能指定验证的Bean字段
   * @return 验证结果
   */
  @SuppressWarnings("unchecked")
  public static final <T> ConstraintViolation<T>[] validate(T bean, String... fields) {
    if (bean == null) {
      throw new ValidationException("Validated JavaBean object can not be null!");
    }

    if (bean.getClass() == Object.class) {
      return new ConstraintViolation[0];
    }

    FieldContext[] fieldContexts =
        ValidationContextCache.getConstraintFieldContexts(bean.getClass());
    if (fieldContexts == null || fieldContexts.length == 0) {
      return new ConstraintViolation[0];
    }

    // 对指定的field进行提取
    FieldContext[] needFieldContexts = null;
    if (fields != null && fields.length > 0) {
      needFieldContexts = new FieldContext[fields.length];
      int i = 0;
      boolean fExist = false; // 检测指定的field是否存在于给定的Bean中

      for (String f : fields) {
        if (f == null || f.trim().length() == 0) {
          continue;
        }

        fExist = false;
        for (FieldContext fc : fieldContexts) {
          if (fc.getField().getName().equals(f)) {
            needFieldContexts[i++] = fc;
            fExist = true;
            break;
          }
        }

        if (!fExist) {
          throw new ValidationException(
              "The field `"
                  + f
                  + "` is not exists in constraint fields of `"
                  + bean.getClass().getName()
                  + "`!");
        }
      }

      // 指定的field都为null或空,则指定无效,验证全部
      if (i == 0) {
        needFieldContexts = fieldContexts;
      }
    } else {
      needFieldContexts = fieldContexts;
    }

    List<ConstraintViolation<T>> violations =
        new ArrayList<ConstraintViolation<T>>(needFieldContexts.length);
    ConstraintViolation<T> fcv = null;

    for (FieldContext fc : needFieldContexts) {
      fcv = validateFieldContext(bean, fc);

      if (fcv != null) {
        violations.add(fcv);
      }
    }

    return violations.toArray(new ConstraintViolation[violations.size()]);
  }