2012-07-16 38 views
2

我正在使用JSR303方法驗證器進行擴展,以自動驗證輸入到我的服務層,並提供一些幫助。確實缺少的一件事是進行交叉參數驗證的能力,即例如比較兩個日期參數。我如何通過hibernate方法驗證來實現?可能嗎 ?任何其他推薦的方法來解決這個問題使用Hibernate(JSR 303)方法驗證來比較參數

這是我的方面

public abstract aspect ValidationAspect { 
@Inject 
private Validator validator; 

protected ParameterValidationError[] validateParameters(
     JoinPoint jp) {   
    MethodSignature methodSignature = (MethodSignature)jp.getSignature(); 
    Method targetMethod = methodSignature.getMethod(); 
    Object targetObj = jp.getThis(); 
    Object[] args = jp.getArgs(); 
    String[] names = ((CodeSignature)jp.getSignature()).getParameterNames();   

    MethodValidator methodValidador = validator.unwrap(MethodValidator.class); 
    Set<? extends MethodConstraintViolation<?>> validationErrors = methodValidador.validateAllParameters(      
      targetObj, 
      targetMethod, 
      args); 

    ParameterValidationError[] output = new ParameterValidationError[validationErrors.size()]; 
    int idx = 0; 
    for (MethodConstraintViolation<?> mcv : validationErrors) { 
     output[idx++] = new ParameterValidationError(
       mcv.getParameterIndex(), 
       names[mcv.getParameterIndex()], 
       mcv.getInvalidValue(), 
       mcv.getMessage());   
    } 

    return output; 
} 

}

回答