gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:35:12 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com