zoukankan      html  css  js  c++  java
  • 如何使用java validation api进行参数校验----Hibernate-Validation

    在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。

    1. Bean Validation 中内置的 constraint

               注解                                      作用

     

    @Valid被注释的元素是一个对象,需要检查此对象的所有字段值
    @Null 被注释的元素必须为 null
    @NotNull 被注释的元素必须不为 null
    @AssertTrue 被注释的元素必须为 true
    @AssertFalse 被注释的元素必须为 false
    @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @Size(max, min) 被注释的元素的大小必须在指定的范围内
    @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
    @Past 被注释的元素必须是一个过去的日期
    @Future 被注释的元素必须是一个将来的日期
    @Pattern(value) 被注释的元素必须符合指定的正则表达式


    2. Hibernate Validator 附加的 constraint

    注解作用
    @Email 被注释的元素必须是电子邮箱地址
    @Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
    @NotEmpty 被注释的字符串的必须非空
    @Range(min=, max=) 被注释的元素必须在合适的范围内
    @NotBlank被注释的字符串的必须非空
    @URL(protocol=,
    host=,    port=, 
    regexp=, flags=)
    被注释的字符串必须是一个有效的url
    @CreditCardNumber
    被注释的字符串必须通过Luhn校验算法,
    银行卡,信用卡等号码一般都用Luhn
    计算合法性
    @ScriptAssert
    (lang=, script=, alias=)
    要有Java Scripting API 即JSR 223 
    ("Scripting for the JavaTM Platform")的实现
    @SafeHtml
    (whitelistType=, 
    additionalTags=)
    classpath中要有jsoup包

    hibernate补充的注解中,最后3个不常用,可忽略。

     

    主要区分下@NotNull  @NotEmpty  @NotBlank 3个注解的区别:

    @NotNull           任何对象的value不能为null

    @NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null

    @NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

    举个使用的例子:

     

    1.  
      public class User {
    2.  
       
    3.  
      @NotBlank
    4.  
      private String name;
    5.  
       
    6.  
      //年龄要大于18岁
    7.  
      @Min(18)
    8.  
      private int age;
    9.  
       
    10.  
      @Email
    11.  
      private String email;
    12.  
       
    13.  
      //嵌套验证
    14.  
      @Valid
    15.  
      private Product products;
    16.  
       
    17.  
      ... //省略getter,setter
    18.  
      }
    19.  
       
    20.  
      public class Product {
    21.  
       
    22.  
      @NotBlank
    23.  
      private String name;
    24.  
       
    25.  
      //价格在10元-50元之间
    26.  
      @Range(min=10,max=50)
    27.  
      private int price;
    28.  
       
    29.  
      ... //省略getter,setter
    30.  
      }

    本人当时测试引入的依赖为:

     

      1.  
        <dependency>
      2.  
        <groupId>org.hibernate</groupId>
      3.  
        <artifactId>hibernate-validator</artifactId>
      4.  
        <version>5.3.4.Final</version>
      5.  
        </dependency>
      6.  
        <dependency>
      7.  
        <groupId>javax.el</groupId>
      8.  
        <artifactId>javax.el-api</artifactId>
      9.  
        <version>2.2.4</version>
      10.  
        </dependency>
      11.  
        <dependency>
      12.  
        <groupId>org.glassfish.web</groupId>
      13.  
        <artifactId>javax.el</artifactId>
      14.  
        <version>2.2.4</version>
      15.  
        </dependency>
      16.  

  • 相关阅读:
    python 操作数据库
    python学习
    Java学习(十)
    Java学习(九)
    Java学习(八)
    Java学习(七)
    Java学习(六)
    Java学习(五)
    Java学习(四)
    Java学习(三)
  • 原文地址:https://www.cnblogs.com/matd/p/10737266.html
Copyright © 2011-2022 走看看