我正在使用JSR303方法验证器,可以自动地验证我的服务层的输入,并提供一些方面的帮助。肯定缺少的一件事是能够进行交叉参数验证,即例如比较两个日期参数。如何通过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;
}
}
答案 0 :(得分:2)
Hibernate Validator的方法级别验证不允许交叉参数验证。它实现了Bean Validation 1.0附录C中指定的方法验证。
Bean Validation 1.1正在进行的讨论的一部分是是否以及如何支持此功能。另见