Marks an annotation as being a Bean Validation constraint.
A given constraint annotation must be annotated by a
@Constraint
annotation which refers to its list of constraint validation implementations.
Each constraint annotation must host the following attributes:
String message() default [...];
which should default to an error
message key made of the fully-qualified class name of the constraint followed by
.message
. For example "{com.acme.constraints.NotSafe.message}"
Class<?>[] groups() default {};
for user to customize the targeted
groups
Class<? extends Payload>[] payload() default {};
for
extensibility purposes
When building a constraint that is both generic and cross-parameter, the constraint
annotation must host the
validationAppliesTo()
property.
A constraint is generic if it targets the annotated element and is cross-parameter if
it targets the array of parameters of a method or constructor.
ConstraintTarget validationAppliesTo() default ConstraintTarget.IMPLICIT;
This property allows the constraint user to choose whether the constraint
targets the return type of the executable or its array of parameters.
A constraint is both generic and cross-parameter if
Such dual constraints are rare. See
SupportedValidationTarget
for more info.
Here is an example of constraint definition:
@Documented
@Constraint(validatedBy = OrderNumberValidator.class)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface OrderNumber {
String message() default "{com.acme.constraint.OrderNumber.message}";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}