第六章、Java Bean Validation内置约束注解

这个规范定义最小内置约束,在常规约束声明和组合约束中都鼓励使用它们。 使用内置约束可以将增强您的约束在依赖于元数据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();
        }
      	
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值