/*
 * Jakarta Bean Validation API
 *
 * License: Apache License, Version 2.0
 * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
 */
package javax.validation;

import java.lang.annotation.Annotation;

import javax.validation.constraintvalidation.SupportedValidationTarget;

Defines the logic to validate a given constraint A for a given object type T.

Implementations must comply to the following restriction:

  • T must resolve to a non parameterized type
  • or generic parameters of T must be unbounded wildcard types

The annotation SupportedValidationTarget can be put on a ConstraintValidator implementation to mark it as supporting cross-parameter constraints. Check out SupportedValidationTarget and Constraint for more information.

Author:Emmanuel Bernard, Hardy Ferentschik
Type parameters:
  • <A> – the annotation type handled by an implementation
  • <T> – the target type supported by an implementation
/** * Defines the logic to validate a given constraint {@code A} * for a given object type {@code T}. * <p> * Implementations must comply to the following restriction: * <ul> * <li>{@code T} must resolve to a non parameterized type</li> * <li>or generic parameters of {@code T} must be unbounded * wildcard types</li> * </ul> * <p> * The annotation {@link SupportedValidationTarget} can be put on a * {@code ConstraintValidator} implementation to mark it as supporting * cross-parameter constraints. Check out {@link SupportedValidationTarget} * and {@link Constraint} for more information. * * @param <A> the annotation type handled by an implementation * @param <T> the target type supported by an implementation * * @author Emmanuel Bernard * @author Hardy Ferentschik */
public interface ConstraintValidator<A extends Annotation, T> {
Initializes the validator in preparation for isValid(Object, ConstraintValidatorContext) calls. The constraint annotation for a given constraint declaration is passed.

This method is guaranteed to be called before any use of this instance for validation.

The default implementation is a no-op.

Params:
  • constraintAnnotation – annotation instance for a given constraint declaration
/** * Initializes the validator in preparation for * {@link #isValid(Object, ConstraintValidatorContext)} calls. * The constraint annotation for a given constraint declaration * is passed. * <p> * This method is guaranteed to be called before any use of this instance for * validation. * <p> * The default implementation is a no-op. * * @param constraintAnnotation annotation instance for a given constraint declaration */
default void initialize(A constraintAnnotation) { }
Implements the validation logic. The state of value must not be altered.

This method can be accessed concurrently, thread-safety must be ensured by the implementation.

Params:
  • value – object to validate
  • context – context in which the constraint is evaluated
Returns:false if value does not pass the constraint
/** * Implements the validation logic. * The state of {@code value} must not be altered. * <p> * This method can be accessed concurrently, thread-safety must be ensured * by the implementation. * * @param value object to validate * @param context context in which the constraint is evaluated * * @return {@code false} if {@code value} does not pass the constraint */
boolean isValid(T value, ConstraintValidatorContext context); }