亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行數據校驗Java Bean Validation 2.0

發布時間:2021-10-19 17:10:40 來源:億速云 閱讀:185 作者:柒染 欄目:大數據

今天就跟大家聊聊有關如何進行數據校驗Java Bean Validation 2.0,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

     我們知道通常情況下程序肯定是分層的,不同的層一般由不同的人來開發。若你是一個有經驗的程序員, 我相信你肯定見過在不同的層了都出現了相同的校驗代碼,這就是某種意義上的垃圾代碼。 為了解決這個問題,Bean Validation 為 JavaBean 驗證定義了相應的元數據模型和 API。默認的元數據是各種Java Annotations,當然也支持xml方式并且你也可以擴展~可以說Bean ValidationJavaBean的一個拓展,它可以布局于任意一層代碼,不局限于Web應用還是端應用。

Java Bean Validation

    JSR是Java Specification Requests的縮寫,意思是Java 規范提案。關于數據校驗這塊,最新的是JSR380,就是JSR第380號標準。Bean Validation是一個通過配置注解來驗證參數的框架,它包含兩部分Bean Validation API(規范)和Hibernate Validator(實現)。

簡單Demo示例
  1. 對Java的最低版本要求是Java 8

  2. 支持容器的校驗,通過TYPE_USE類型的注解實現對容器內容的約束:`List<@Email String>`

  3. 支持日期/時間的校驗,@Past@Future

  4. 拓展元數據(新增注解):@Email,@NotEmpty,@NotBlank,@Positive, @PositiveOrZero,@Negative,@NegativeOrZero,@PastOrPresent和@FutureOrPresent

    1. @Email、@NotEmpty、@NotBlank之前是Hibernate額外提供的,2.0標準后hibernate自動退位讓賢并且標注為過期了

  5. Bean Validation 2.0的唯一實現為Hibernate Validator。(其實還有Apache BVal,但是你懂的,forget it)

  6. 對于Hibernate Validator,它自己也擴展了一些注解支持。

所以,對于Java Bean Validation的實現落地產品就沒啥好選的,導入Hibernate Validator(最新版本)吧:

  • POM加入

       <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.17.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
            <version>8.5.29</version>
            <!--<scope>provided</scope> 打包時最用此scope-->
        </dependency>
  • 編寫一個Java Bean

@Getter
@Setter
@ToString
public class Person {

    // 錯誤消息message是可以自定義的
    @NotNull(message = "名字不能為null")
    public String name;
    @Positive
    public Integer age;

    @NotNull
    @NotEmpty
    private List<@Email String> emails;
    @Future
    private Date start;

}
 public static void main(String[] args) {
        Person person = new Person();
        //person.setName("fsx");
        person.setAge(-1);
        // email校驗:雖然是List都可以校驗哦
        person.setEmails(Arrays.asList("fsx@gmail.com", "baidu@baidu.com", "aaa.com"));
        //person.setStart(new Date()); //start 需要是一個將來的時間: Sun Jul 21 10:45:03 CST 2019
        //person.setStart(new Date(System.currentTimeMillis() + 10000)); //校驗通過

        // 對person進行校驗然后拿到結果(顯然使用時默認的校驗器)   會保留下校驗失敗的消息
        Set<ConstraintViolation<Person>> result = Validation.buildDefaultValidatorFactory().getValidator().validate(person);
        // 對結果進行遍歷輸出
        result.stream().map(v -> v.getPropertyPath() + " " + v.getMessage() + ": " + v.getInvalidValue())
                .forEach(System.out::println);


       //用hibernateValidator
        HibernateValidatorConfiguration configuration = Validation.byProvider(HibernateValidator.class)
				 .configure()
				 .failFast(false);
		 ValidatorFactory validatorFactory = configuration.buildValidatorFactory();

		 Set<ConstraintViolation<TestBean>> sets= validatorFactory.getValidator().validate(person);

		 sets.stream().map(v->v.getPropertyPath()+" " +v.getMessage()+":"+v.getInvalidValue()).forEach(System.out::println);
    }
  • 運行mian函數,控制臺打印輸出

name名字不能為null: null //  此處錯誤消息是自己的自定義內容
age必須是正數: -1
emails[2].<list element>不是一個合法的電子郵件地址: aaa.com

常見的驗證規則如下:

@AssertFalse   驗證boolean類型只能為false
@AssertTrue   驗證boolean類型只能為true

其它一些規則詳見:

javax.validation.constraints包下

核心API分析

Validation類

    官方給它的定義為:This class is the entry point for Bean Validation.它作為校驗的入口,有三種方式來啟動,這里主要看最常見的啟動方式:

  • 最簡單方式:使用默認的ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 

  • 可以直接提供一個類型安全ValidationProvider實現。比如HibernateValidator就是一個ValidationProvider的實現:

    HibernateValidatorConfiguration configuration = Validation.byProvider(HibernateValidator.class)
            // .providerResolver( ... ) // 因為制定了Provider,這個參數就可選了
            .configure()
            .failFast(false);
    ValidatorFactory validatorFactory = configuration.buildValidatorFactory();


     

看完上述內容,你們對如何進行數據校驗Java Bean Validation 2.0有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卢龙县| 石阡县| 彭山县| 万载县| 鄄城县| 建宁县| 定兴县| 仁布县| 安溪县| 精河县| 新蔡县| 周至县| 壶关县| 当阳市| 鹤庆县| 和政县| 东丰县| 新昌县| 禹州市| 北海市| 疏附县| 晋宁县| 云林县| 中阳县| 阿鲁科尔沁旗| 龙川县| 大连市| 广丰县| 东兴市| 寻乌县| 藁城市| 宜宾市| 通山县| 浮山县| 务川| 临湘市| 德清县| 岑溪市| 邢台市| 得荣县| 图们市|