javax.validation

## Annotation Type Constraint

-     @Documented
      @Target(value=ANNOTATION_TYPE)
      @Retention(value=RUNTIME)
      public @interface Constraint

  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
  - two kinds of `ConstraintValidator`s are attached to the constraint, one targeting `ValidationTarget.ANNOTATED_ELEMENT` and one targeting `ValidationTarget.PARAMETERS`,
  - or if a `ConstraintValidator` targets both `ANNOTATED_ELEMENT` and `PARAMETERS`.
  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[] payload() default {};
       }

  Author:
    Emmanuel Bernard, Gavin King, Hardy Ferentschik

- - ### Required Element Summary

    Required Elements
    Modifier and Type | Required Element and Description
    --- | ---
    `Class<? extends ConstraintValidator<?,?>>[]` | `validatedBy` `ConstraintValidator` classes must reference distinct target types for a given `ValidationTarget` If two `ConstraintValidator`s refer to the same type, an exception will occur.

- - ### Element Detail

    - #### validatedBy

          public abstract Class<? extends ConstraintValidator<?,?>>[] validatedBy

      `ConstraintValidator` classes must reference distinct target types for a given `ValidationTarget` If two `ConstraintValidator`s refer to the same type, an exception will occur.

      At most one `ConstraintValidator` targeting the array of parameters of methods or constructors (aka cross-parameter) is accepted. If two or more are present, an exception will occur.
      Returns:
        array of (@code ConstraintValidator} classes implementing the constraint

Copyright © 1996-2013, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.