2

私はJSR303メソッドバリデーターを拡張的に使用して、aspectjの少しの助けを借りて、サービスレイヤーへの入力を自動的に検証しています。確かに欠けていることの1つは、クロスパラメータ検証を実行する機能です。つまり、たとえば2つの日付パラメータを比較します。Hibernateメソッドの検証でそれをどのように達成できますか?出来ますか ?これに対処する他の推奨される方法はありますか?

これは私の側面の現在のコードです

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;
}   

}

4

1 に答える 1

2

Hibernate Validatorのメソッドレベルの検証では、パラメーター間の検証はできません。BeanValidation1.0の付録Cで指定されているメソッド検証を実装します。

Bean Validation 1.1の進行中の議論の一部は、この機能をサポートするかどうか、そしてどのようにサポートするかです。も参照してください

于 2012-07-16T14:00:07.030 に答える