下面列出了javax.validation.Validator#forExecutables ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@AroundInvoke
public Object validateMethodInvocation(InvocationContext ctx) throws Exception {
Object resource = ctx.getTarget();
Method method = ctx.getMethod();
log.log(Level.FINE, "Starting validation for controller method: {0}#{1}", new Object[]{
resource.getClass().getName(), method.getName()
});
Validator validator = validatorFactory.getValidator();
ExecutableValidator executableValidator = validator.forExecutables();
// validate controller property parameters
processViolations(ctx,
validator.validate(resource)
);
// validate controller method parameters
processViolations(ctx,
executableValidator.validateParameters(resource, method, ctx.getParameters())
);
// execute method
Object result = ctx.proceed();
// TODO: Does this make sense? Nobody will be able to handle these. Remove?
processViolations(ctx,
executableValidator.validateReturnValue(resource, method, result)
);
return result;
}
private static void validate(Method method, RouteDefinition definition, Validator validator, Object toInvoke, Object[] args) {
// check method params first (if any)
if (validator != null && args != null) {
ExecutableValidator executableValidator = validator.forExecutables();
Set<ConstraintViolation<Object>> result = executableValidator.validateParameters(toInvoke, method, args);
if (result != null && result.size() > 0) {
throw new ConstraintException(definition, result);
}
}
}
private static void validateResult(Object result, Method method, RouteDefinition definition, Validator validator, Object toInvoke) {
if (validator != null) {
ExecutableValidator executableValidator = validator.forExecutables();
Set<ConstraintViolation<Object>> validationResult = executableValidator.validateReturnValue(toInvoke, method, result);
if (validationResult != null && validationResult.size() > 0) {
throw new ConstraintException(definition, validationResult);
}
}
}
@AroundInvoke
public Object validateMethodInvocation(InvocationContext ctx) throws Exception {
Object resource = ctx.getTarget();
Method method = ctx.getMethod();
log.log(Level.FINE, "Starting validation for controller method: {0}#{1}", new Object[]{
resource.getClass().getName(), method.getName()
});
Validator validator = validatorFactory.getValidator();
ExecutableValidator executableValidator = validator.forExecutables();
// validate controller property parameters
processViolations(ctx,
validator.validate(resource)
);
// validate controller method parameters
processViolations(ctx,
executableValidator.validateParameters(resource, method, ctx.getParameters())
);
// execute method
Object result = ctx.proceed();
// TODO: Does this make sense? Nobody will be able to handle these. Remove?
processViolations(ctx,
executableValidator.validateReturnValue(resource, method, result)
);
return result;
}
private List<ConstraintViolation<?>> simulateValidation(Object controller, String methodName, Object... args) {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
ExecutableValidator executableValidator = validator.forExecutables();
List<ConstraintViolation<?>> result = new ArrayList<>();
// validate controller fields
result.addAll(validator.validate(controller));
// controller method parameters
Method method = getFirstMethod(controller.getClass(), methodName);
result.addAll(executableValidator.validateParameters(controller, method, args));
return result;
}
private List<ConstraintViolation<?>> simulateValidation(Object controller, String methodName, Object... args) {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
ExecutableValidator executableValidator = validator.forExecutables();
List<ConstraintViolation<?>> result = new ArrayList<>();
// validate controller fields
result.addAll(validator.validate(controller));
// controller method parameters
Method method = getFirstMethod(controller.getClass(), methodName);
result.addAll(executableValidator.validateParameters(controller, method, args));
return result;
}
@Provides
@Singleton
ExecutableValidator executableValidator(final Validator validator) {
return validator.forExecutables();
}