2

我正在广泛使用 JSR303 方法验证器来自动验证对我的服务层的输入,并在 aspectj 的帮助下自动进行。肯定缺少的一件事是进行交叉参数验证的能力,例如比较两个日期参数。如何通过休眠方法验证来实现这一点?可能吗 ?还有其他推荐的方法来解决这个问题吗?

这是我方面的当前代码

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 的方法级验证不允许跨参数验证。它实现了 Bean Validation 1.0 附录 C 中指定的方法验证。

Bean Validation 1.1 正在进行的讨论的一部分是是否以及如何支持此功能。也可以看看

于 2012-07-16T14:00:07.030 回答