Interface Validator
- All Known Subinterfaces:
SmartValidator
- All Known Implementing Classes:
CustomValidatorBean, LocalValidatorFactoryBean, OptionalValidatorFactoryBean, SpringValidatorAdapter
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.
- Author:
- Rod Johnson, Juergen Hoeller, Toshiaki Maki, Arjen Poutsma
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> ValidatorforInstanceOf(Class<T> targetClass, BiConsumer<T, Errors> delegate) Return aValidatorthat checks whether the target object is an instance oftargetClass, applying the givendelegateto populateErrorsif it is.static <T> ValidatorforType(Class<T> targetClass, BiConsumer<T, Errors> delegate) Return aValidatorthat checks whether the target object's class is identical totargetClass, applying the givendelegateto populateErrorsif it is.booleanvoidValidate the giventargetobject which must be of aClassfor which thesupports(Class)method typically has returned (or would return)true.default ErrorsvalidateObject(Object target) Validate the giventargetobject individually.
-
Method Details
-
supports
-
validate
Validate the giventargetobject which must be of aClassfor which thesupports(Class)method typically has returned (or would return)true.The supplied
errorsinstance can be used to report any resulting validation errors, typically as part of a larger binding process which this validator is meant to participate in. Binding errors have typically been pre-registered with theerrorsinstance before this invocation already.- Parameters:
target- the object that is to be validatederrors- contextual state about the validation process- See Also:
-
validateObject
Validate the giventargetobject individually.Delegates to the common
validate(Object, Errors)method. The returnederrorsinstance can be used to report any resulting validation errors for the specific target object, for example,if (validator.validateObject(target).hasErrors()) ...orvalidator.validateObject(target).failOnError(IllegalStateException::new));.Note: This validation call comes with limitations in the
Errorsimplementation used, in particular no support for nested paths. If this is insufficient for your purposes, call the regularvalidate(Object, Errors)method with a binding-capableErrorsimplementation such asBeanPropertyBindingResult.- Parameters:
target- the object that is to be validated- Returns:
- resulting errors from the validation of the given object
- Since:
- 6.1
- See Also:
-
forInstanceOf
Return aValidatorthat checks whether the target object is an instance oftargetClass, applying the givendelegateto populateErrorsif it is.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."); } });- Type Parameters:
T- the target object type- Parameters:
targetClass- the class supported by the returned validatordelegate- function invoked with the target object, if it is an instance of type T- Returns:
- the created
Validator - Since:
- 6.1
-
forType
Return aValidatorthat checks whether the target object's class is identical totargetClass, applying the givendelegateto populateErrorsif it is.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."); } });- Type Parameters:
T- the target object type- Parameters:
targetClass- the exact class supported by the returned validator (no subclasses)delegate- function invoked with the target object, if it is an instance of type T- Returns:
- the created
Validator - Since:
- 6.1
-