这个规范定义最小内置约束,在常规约束声明和组合约束中都鼓励使用它们。 使用内置约束可以将增强您的约束在依赖于元数据API的框架(例如客户端验证框架或数据模式生成框架)之间的可移植性。
内置注解使用空的@Constraint注解进行注释,以避免规范API与特定实现之间的任何依赖,每个Bean验证提供程序都必须将内置约束注解标识为有效约束定义, 并为每个约束提供兼容实现。内置约束验证实现的优先级低于XML映射定义,换句话说,内置约束的ConstraintValidator实现可以通过使用XML映射来覆盖(请参见第7.1.2节)。 所有内置约束都在javax.validation.constraints包中, 这是约束及其声明的列表:
-
例子 6.1 @Null 约束
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是null, 适合任何类型 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Null{ String message() default "{javax.validation.constraints.Null.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 在同一个元素使用多个@Null注解 * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Null[] value(); } }
-
-
例子6.2、@NotNull 约束
-
package javax.validation.constraints; /** * 这个注解标识该元素禁止为null, 适合任何类型 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface NotNull{ String message() default "{javax.validation.constraints.NotNull.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 在同一个元素使用多个@NotNull注解 * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ NotNull[] value(); } }
-
-
例子 6.3、@AssertTrue约束(断言为false)
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是true, 所有它支持Boolean和boolean类型 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface AssertTrue{ String message() default "{javax.validation.constraints.AssertTrue.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 在同一个元素使用多个@AssertTrue * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ AssertTrue[] value(); } }
-
-
例子 6.4、@AssertFalse 约束(断言为false)
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是false, 所有它支持Boolean和boolean类型 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface AssertFalse{ String message() default "{javax.validation.constraints.AssertFalse.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 在同一个元素使用多个@AssertFalse * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ AssertFalse[] value(); } }
-
-
例子6.5、@Min 约束( 最小)
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是数字,且该值必须大于给定最小值。 * 支持类型: BigDecimal 、BigInteger, byte, short, int , long和它们包装类 * 注意 double和float 不支持(原因是取整异常, 有些提供实现商可以近似支持),同时null值也可以认为有效的值 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Min{ String message() default "{javax.validation.constraints.Min.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * @return 元素值必须大于等于该注解设置的值 */ long value(); /** * 在同一个元素使用多个@Min * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Min[] value(); } }
-
-
例子6 @Max 约束(最大)
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是数字,且该值必须小于给定最大值。 * 支持类型: BigDecimal 、BigInteger, byte, short, int , long和它们包装类 * 注意 double和float 不支持(原因是取整异常, 有些提供实现商可以近似支持),同时null值也可以认为有效的值 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Max{ String message() default "{javax.validation.constraints.Min.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * @return 元素值必须小于等于该注解设置的值 */ long value(); /** * 在同一个元素使用多个@Max * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Max[] value(); } }
-
-
例子7、@DecimalMin 约束(最小值 字符串转成BigDecimal进行比较)
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是数字,且该值必须大于给定最小值。 * 支持类型: BigDecimal 、BigInteger,String, byte, short, int , long和它们包装类 * 注意 double和float 不支持(原因是取整异常, 有些提供实现商可以近似支持),同时null值也可以认为有效的值 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface DecimalMin{ String message() default "{javax.validation.constraints.DecimalMin.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * @return 字符串将会先转成BigDecimal然后进行比较,元素值必须大于等于该注解设置的值 */ String value(); /** * 在同一个元素使用多个@DecimalMin * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ DecimalMin[] value(); } }
-
-
例子 8 @DecimalMax
-
package javax.validation.constraints; /** * 这个注解标识该元素必须是数字,且该值必须小于给定最大值。 * 支持类型: BigDecimal 、BigInteger,String, byte, short, int , long和它们包装类 * 注意 double和float 不支持(原因是取整异常, 有些提供实现商可以近似支持),同时null值也可以认为有效的值 * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface DecimalMax{ String message() default "{javax.validation.constraints.DecimalMax.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * @return 字符串将会先转成BigDecimal然后进行比较,元素值必须小于等于该注解设置的值 */ String value(); /** * 在同一个元素使用多个@DecimalMax * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ DecimalMax[] value(); } }
-
-
例子9、@Size ( 标识大小) 数字在某个区间内
-
package javax.validation.constraints; /** * 这个注解标识该元素大小或长度必须在某一个区间,且闭区间(包含边界)。 * 支持类型: String (长度), Collection, Map, Array(元素个数) * * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Size{ String message() default "{javax.validation.constraints.Size.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * @return 元素大小必须大于或等于该值 */ int min() default 0; /** *@return 元素大小必须小于或等于于该值 */ int max() default Integer.MAX_VALUE; /** * 在同一个元素使用多个@Size * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Size[] value(); } }
-
-
例子10、@Digits约束 (精度约束)
-
package javax.validation.constraints; /** * 这个注解标识该元素确定整数的最大位数和精度的最大位数 * 支持类型:BigDecimal, BigInteger, String , byte, short, int, long和对应包装类 * * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Digits{ String message() default "{javax.validation.constraints.Digits.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * * @return 整数的最大位数限制 */ int integer(); /** * * @return 小数的最大位数限制 * */ int fraction(); /** * 在同一个元素使用多个@Digits * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Digits[] value(); } }
-
-
例子11、@Past约束
-
package javax.validation.constraints; /** * 这个注解标识该元素日期必须是过去日期 * 现在根据虚拟机定义为当前时间,如果比较类型为Calendar类型, 则使用的日历是基于当前时区和当前区域设置的日历。 * 支持类型: java.util.Date java.util.Calendar * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Past{ String message() default "{javax.validation.constraints.Past.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 在同一个元素使用多个@Past * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Past[] value(); } }
-
-
例子12、@Future约束
-
package javax.validation.constraints; /** * 这个注解标识该元素日期必须是将来日期 * 现在根据虚拟机定义为当前时间,如果比较类型为Calendar类型, 则使用的日历是基于当前时区和当前区域设置的日历。 * 支持类型: java.util.Date java.util.Calendar * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Future{ String message() default "{javax.validation.constraints.Future.message}"; Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 在同一个元素使用多个@Future * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Past[] value(); } }
-
-
例子13、@Pattern约束
-
package javax.validation.constraints; /** * * 这个字符串必须满足这个正则表达式,正则表达式必须满足Java 正则表达式 * java.util.regex.Pattern * * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy={}) public @interface Pattern{ /** * @return 进行匹配正则表达式 */ String regexp(); /** *@return 解析正则表达式时要考虑的Flag数组 */ Flag[] flags() default{}; /** * @return 异常消息模板 */ String message() default "{javax.validation.constraints.Pattern.message}"; /** * 组约束属于 */ Class<?> [] groups() default {}; Class<? extends Payload> [] payload() default{}; /** * 可能正则表达式标记类型 */ public static Regexp enum Flag{ /** * 开启Unix行模式 * @see java.util.regex.Pattern#UNIX_LINES */ UNIX_LINES(java.util.regex.Pattern.UNIX_LINES), /** * 开启大小写不敏感 * @see java.util.regex.Pattern#CASE_INSENSITIVE */ CASE_INSENSITIVE(java.util.regex.Pattern.CASE_INSENSITIVE), /** * 允许空格和模式注释 * @see java.util.regex.Pattern#COMMENTS */ COMMENTS(java.util.regex.Pattern.COMMENTS), /** * 开启 多行模式 * @see java.util.regex.Pattern#MULTILINE */ MULTILINE(java.util.regex.Pattern.MULTILINE), /** * 开启Unix行模式 * @see java.util.regex.Pattern#DOTALL */ DOTALL(java.util.regex.Pattern.DOTALL), /** * 支持Unicode 折叠 * @see java.util.regex.Pattern#UNICODE_CASE */ UNICODE_CASE(java.util.regex.Pattern.UNICODE_CASE), /** * 实现规范对等 * @see java.util.regex.Pattern#CANON_EQ */ CANON_EQ(java.util.regex.Pattern.CANON_EQ); private final int value; private Flag(int value){ this.value = value; } public int getValue(){ return value; } } /** * 在同一个元素使用多个@Pattern * @author Emmanuel Bernard */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @interface List{ Pattern[] value(); } }
-