Java Bean validation specification defines following constraint annotations in package javax.validation.constraints :
- javax.validation.constraints
- AssertFalse
- AssertTrue
- DecimalMax
- DecimalMin
- Digits
- Email
- Future
- FutureOrPresent
- Max
- Min
- Negative
- NegativeOrZero
- NotBlank
- NotEmpty
- NotNull
- Null
- Past
- PastOrPresent
- Pattern
- Positive
- PositiveOrZero
- Size
[org.hibernate.validator:hibernate-validator 6.2.0.Final]
Details:
Annotation |
Parameters: required and important optional |
Target variable type |
Expected target variable value (variableValue) |
AssertFalse/AssertTrue
|
None
|
boolean, java.lang.Boolean
|
false/true
|
DecimalMin/DecimalMax
|
value =int,
inclusive = boolean
|
BigDecimal, BigInteger, CharSequence, primitive numbers (byte, short, int, long) and their respective wrappers
|
variableValue >=
value
variableValue <=
value
Note: above is not inclusive if
inclusive =false, by default it's true.
|
Digits
|
integer =int,
fraction =int
|
same as above
|
variableIntegralDigits <=
integer
and
variableFractionalDigits <=
fraction
|
Min/Max
|
value =int
|
same as above, except for CharSequence
|
variableValue >=
value
variableValue <=
value
|
Size
|
max =int,
min =int
|
CharSequence, Collection, Map, Array
|
variableValueRelatedSize >=
min
and
variableValueRelatedSize <=
max
|
Pattern
|
regexp =String,
flags = Pattern.Flag[]
|
CharSequence (String)
|
Pattern.matches(
regexp , variableValue) == true
|
Past/Future
|
None
|
java.util.Date, java.util.Calendar, java.time.*(2.0)
|
currentMillis of variableValue < time now in millis
currentMillis of variableValue > time now in millis
|
PastOrPresent/FutureOrPresent
(2.0)
|
None
|
java.util.Date, java.util.Calendar, java.time.* types
|
currentMillis of variableValue <=0 time now in millis
currentMillis of variableValue >= time now in millis
|
Null/NotNull
|
None
|
Any subclass of java.lang.Object
|
variableValue == null
variableValue != null
|
Email
(2.0)
|
None
|
CharSequence (String)
|
must be a valid email address.
|
NotEmpty
(2.0)
|
None
|
CharSequence (String), Collection, Map,Array
|
must not be null nor empty.
|
NotBlank
(2.0)
|
None
|
CharSequence (String)
|
must not be null and must contain at least one non-whitespace character.
|
Positive/Negative
(2.0)
|
None
|
BigDecimal, BigInteger, byte, short, int, long, float, double and their respective wrappers
|
variableValue > 0
variableValue < 0
|
PositiveOrZero/NegativeOrZero
(2.0)
|
None
|
BigDecimal, BigInteger, byte, short, int, long, float, double and their respective wrappers
|
variableValue >=0
variableValue <=0
|
Other optional parameters
All above annotations have these additional parameters (including which are showing 'None'):
-
message =String: The validation error to be displayed as a message. Defaulted to built-in resource bundle keys for i18n purpose. The default can be overridden by a hard coded message string literal or a new application defined resource bundle key. Resource keys are used within {} . The default resource key is the fully qualified name of the annotation class concatenated to .message, e.g. javax.validation.constraints.Future.message . we should follow the same convention when creating custom constraint annotations.
-
groups =Class<?>[] This is a way to group constraints. The validation evaluation can be restricted to certain group(s) of annotation based on the class types defined here. We can specify groups while calling Validator#validate(..) method.
-
payload =Class<? extends Payload>[] This is a way to associate some metadata information with a given constraint annotation declaration.
Note that all above three parameters are optional on client side but when creating new custom constraint annotations, we have to include all these three parameter definitions as it is, otherwise we will have javax.validation.ConstraintDefinitionException.
List constraints
For each of the above predefined annotations, there is an inner annotation type named List .
For example let's have a look at NotNull definition:
Definition of NotNull(Version: java-bean-validation 6.2.0.Final) package javax.validation.constraints;
........
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Repeatable(List.class)
@Documented
@Constraint(validatedBy = {})
public @interface NotNull {
String message() default "{javax.validation.constraints.NotNull.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@interface List {
NotNull[] value();
}
}
This annotation generally allows to specify several annotations on the same element, e.g. with different validation groups and messages.
Bean Validation 2.0 (JSR 380) Changes
- New built-in constraints (as seen in above table):
@Email, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero, @PastOrPresent and @FutureOrPresent
- All constraint annotations have been annotated with Java 8 @Repeatable annotation.
- All constraint annotation can be used as Java 8 Type Annotations, i.e. their
@Target now includes ElementType.TYPE_USE.
|
|