This interface is totally divorced from any infrastructure or context; that is to say it is not coupled to validating only objects in the web tier, the data-access tier, or the whatever-tier. As such it is amenable to being used in any layer of an application, and supports the encapsulation of validation logic as a first-class citizen in its own right.
Implementations can be created via the static factory methods
forInstanceOf(Class, BiConsumer) or
forType(Class, BiConsumer).
Below is a simple but complete Validator that validates that the
various String properties of a UserLogin instance are not
empty (they are not null and do not consist
wholly of whitespace), and that any password that is present is
at least 'MINIMUM_PASSWORD_LENGTH' characters in length.
Validator userLoginValidator = Validator.forInstance(UserLogin.class, (login, errors) -> {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");
if (login.getPassword() != null
&& login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) {
errors.rejectValue("password", "field.min.length",
new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)},
"The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length.");
}
});
See also the Spring reference manual for a fuller discussion of the
Validator interface and its role in an enterprise application.
SmartValidator, Errors, ValidationUtils, DataBinder#setValidator
| Modifier and Type | Method and Description |
|---|---|
| public static < the target object type T> Validator | Returns: the createdValidatorthe class supported by the returned validator targetClass, BiConsumer<T, Errors> function invoked with the target object, if it is an
instance of type T delegate)Return a |
| public static < the target object type T> Validator | Returns: the createdValidatorthe exact class supported by the returned validator (no subclasses) targetClass, BiConsumer<T, Errors> function invoked with the target object, if it is an
instance of type T delegate)Return a |
| public boolean | |
| public void | validate(Object
the object that is to be validated target, Errors contextual state about the validation process errors)Validate the given |
| public default Errors | Returns: resulting errors from the validation of the given objectthe object that is to be validated target)Validate the given |
| forInstanceOf | back to summary |
|---|---|
| public static <T> Validator forInstanceOf(Class<T> targetClass, BiConsumer<T, Errors> delegate) Return a For instance: Validator passwordEqualsValidator = Validator.forInstanceOf(PasswordResetForm.class, (form, errors) -> {
if (!Objects.equals(form.getPassword(), form.getConfirmPassword())) {
errors.rejectValue("confirmPassword",
"PasswordEqualsValidator.passwordResetForm.password",
"password and confirm password must be same.");
}
});
| |
| forType | back to summary |
|---|---|
| public static <T> Validator forType(Class<T> targetClass, BiConsumer<T, Errors> delegate) Return a For instance: Validator passwordEqualsValidator = Validator.forType(PasswordResetForm.class, (form, errors) -> {
if (!Objects.equals(form.getPassword(), form.getConfirmPassword())) {
errors.rejectValue("confirmPassword",
"PasswordEqualsValidator.passwordResetForm.password",
"password and confirm password must be same.");
}
});
| |
| supports | back to summary |
|---|---|
| public boolean supports(Class<?> clazz) Can this This method is typically implemented like so: return Foo.class.isAssignableFrom(clazz);(Where Foo is the class (or superclass) of the actual
object instance that is to be validated.)
| |
| validate | back to summary |
|---|---|
| public void validate(Object target, Errors errors) Validate the given The supplied
| |
| validateObject | back to summary |
|---|---|
| public default Errors validateObject(Object target) Validate the given Delegates to the common Note This validation call comes with limitations in the
| |