java - 使用 Hibernate (JSR 303) 方法验证来比较参数

标签 java hibernate aspectj bean-validation hibernate-validator

我正在广泛使用 JSR303 方法 validator 来自动验证服务层的输入,并需要方面的一点帮助。肯定缺少的一件事是进行交叉参数验证的能力,即例如比较两个日期参数。如何通过 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;
}   

}

最佳答案

Hibernate Validator 的方法级别验证不允许交叉参数验证。它实现了 Bean Validation 1.0 附录 C 中指定的方法验证。

关于 Bean Validation 1.1 正在进行的讨论的一部分是是否以及如何支持此功能。另请参阅

关于java - 使用 Hibernate (JSR 303) 方法验证来比较参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496737/

相关文章:

java - 总是 try-catch-finally 异常?中央错误管理?

java - 如何使用aspectJ使我的JLabels变成红色?

java - 属性文件中保存的值是否有长度限制?

java - 无法检索 Eclipse 插件中选定的 java 文件名/路径

java - 在 Java、Spring MVC、Hibernate with Annotations Web 应用程序中设置 MySQL 用户变量的最佳方法是什么?

java - "Data-normalized"是什么意思?

java - 使用 AspectJ 验证初始调用递归函数的参数

java - Spring /json : Convert a typed collection like List<MyPojo>

java - 根据 2 个点和半径绘制圆弧

java - Spring反序列化带有额外列的manytomany表