第六章、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();
        }
      	
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Validation是一种用于校验数据的框架,它提供了一系列的注解和工具类,用于对数据进行验证。在Java中,有两个常用的校验注解:@Valid和@Validated。这两个注解的功能大部分相似,但也有一些区别。 @Valid注解属于javax.validation包下的注解,而@Validated注解属于Spring框架下的注解。@Valid注解支持嵌套校验,即可以对对象中的属性进行递归校验,而@Validated注解不支持嵌套校验。另外,@Validated注解支持分组校验,可以根据不同的分组对数据进行不同的校验,而@Valid注解不支持分组校验。 在实际业务中,如果需要对数据进行校验,可以使用已有的校验注解,如@NotNull、@Size等。但是有时候这些注解可能无法满足业务需求,这时可以考虑自定义Validation注解。自定义Validation注解可以通过编写自定义的校验器来实现对数据的校验。 使用@Validated注解时,可以在需要校验的Model上加上@Valid注解。同时,可以使用通用的Validator校验工具类来对对象进行校验。该工具类使用了Java的Validator接口来进行校验,可以根据校验结果抛出异常或返回校验结果。 总结起来,Validation是一种用于校验数据的框架,提供了@Valid和@Validated两个注解,可以用于对数据进行校验。@Valid注解属于javax.validation包下的注解,支持嵌套校验;@Validated注解属于Spring框架下的注解,支持分组校验。自定义Validation注解可以通过编写自定义的校验器来实现对数据的校验。可以使用通用的Validator校验工具类来对对象进行校验。 #### 引用[.reference_title] - *1* *2* [SpringBoot使用Validation校验参数](https://blog.csdn.net/justry_deng/article/details/86571671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java类属性字段校验(validation的使用)](https://blog.csdn.net/rao991207823/article/details/117001686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值