<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、為什么要對配置屬性值校驗 我們都知道配置文件是需要開發人員手動來修改的,只要是人為參與就會有出錯的可能。為了避免人為配置出錯的可能,我們需要對配置屬性值做校驗。 比如: * 針對數據庫密碼配置:需要限定最小長度或者復雜度限制 * 針對系統對外發郵件,郵件發送方的郵箱地址配置:字符串配置要符合一定的郵件正則表達式規則 * 針對某些不能為空的配置:開發人員有可能忘了為它賦值,等等場景 我們不能等到程序上線之后,才發現相關的配置錯誤。所以我們**通常對配置屬性與類對象的成員變量綁定的時候,就加上一些校驗規則。如果配置值不符合校驗規則,在應用程序在啟動的時候就會拋出異常。** ## 二、如何對綁定的屬性值進行校驗 比如:我們希望對之前章節定義的family類里面爸爸的年齡,進行校驗。讓其不能小于21歲,小于21就是不合理的配置,也就是錯誤配置。那我們該怎么做呢? **在需要校驗的屬性裝配類上加@Validated注解** ~~~ @Data @Component @Validated @ConfigurationProperties(prefix = "family") public class Family { ~~~ * 校驗父親的年齡,必須大于21歲 ~~~ public class Father { private String name; @Min(21) private Integer age; } ~~~ * 校驗familyName,必須不能為空 ~~~ @NotEmpty private String familyName; ~~~ 這些校驗規則注解是在JSR 303(java)規范中定義的,但是JSR 303只是一個規范,并沒有很多比較具體的實現。目前通常都是使用hibernate-validator進行統一參數校驗,hibernate-validator是對JSR 303規范的實現。 > 所以當你使用注解的時候,如果org.hibernate.validator.constraints包和javax.validation.constraints包同時存在某個校驗注解,要import使用org.hibernate.validator.constraints包。 > ![](https://img.kancloud.cn/e3/1a/e31a4a8053cf3f7a93fa8616b2bdddb4_1140x79.png) ~~~ <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.4.Final</version> </dependency> ~~~ 在之前的Spring Boot 版本中,hibernate-validator是作為默認引入的web開發的集成package,但是在我最新使用的Spring Boot 2.3.0.RELEASE已經不是默認引入的了,所以需要通過上面的maven坐標單獨引入。 ## 三、當校驗失敗的時候拋出異常 針對Family的屬性校驗,只需要寫一個測試類,將Family類注入就可以。 ~~~ @ExtendWith(SpringExtension.class) //Junit5 @SpringBootTest public class CustomYamlTest { @Resource Family family; @Test public void hello(){ System.out.println(family.toString()); } } ~~~ 如果我們修改family.father.age=18,也就是說不滿足最小值是21的這樣一個校驗規則。 ![](https://img.kancloud.cn/17/dc/17dc98b93f3e0574a1cff7a13b8c454f_451x161.png) 校驗失敗,會有如下異常。 ![](https://img.kancloud.cn/42/f4/42f4bbae69941ec53a87f86fc9bc8c26_1397x241.png) ## 三、其他參考例子: * @size (min=6, max=20, message="密碼長度只能在6-20之間") * @pattern (regexp="\[a-za-z0-9.\_%+-\]+@\[a-za-z0-9.-\]+\\.\[a-za-z\]{2,4}", message="請輸入正確的郵件格式") * @Length(min = 5, max = 20, message = "用戶名長度必須位于5到20之間") * @Email(message = "請輸入正確的郵箱") * @NotNull(message = "用戶名稱不能為空") * @Max(value = 100, message = "年齡不能大于100歲") * @Min(value= 18 ,message= "必須年滿18歲!" ) * @AssertTrue(message = "bln4 must is true") * @AssertFalse(message = "blnf must is falase") * @DecimalMax(value="100",message="decim最大值是100") * @DecimalMin(value="100",message="decim最小值是100") * @NotNull(message = "身份證不能為空") * @Pattern(regexp="^(\\d{18,18}|\\d{15,15}|(\\d{17,17}\[x|X\]))$", message="身份證格式錯誤") ## 附錄、常用校驗注解 實際上這些校驗注解不僅可以校驗配置屬性值,也可以校驗HTTP請求參數值,我們后面的章節會為大家再次介紹。 [官方JSR 303規范(國外網址,國內訪問比較慢,需要耐心等)](https://beanvalidation.org/1.0/spec/) | 限制 | 說明 | | --- | --- | | @Null | 限制只能為null | | @NotNull | 限制必須不為null | | @AssertFalse | 限制必須為false | | @AssertTrue | 限制必須為true | | @DecimalMax(value) | 限制必須為一個不大于指定值的數字 | | @DecimalMin(value) | 限制必須為一個不小于指定值的數字 | | @Digits(integer,fraction) | 限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction | | @Future | 限制必須是一個將來的日期 | | @Max(value) | 限制必須為一個不大于指定值的數字 | | @Min(value) | 限制必須為一個不小于指定值的數字 | | @Past | 限制必須是一個過去的日期 | | @Pattern(value) | 限制必須符合指定的正則表達式 | | @Size(max,min) | 限制字符長度必須在min到max之間 | | @Past | 驗證注解的元素值(日期類型)比當前時間早 | | @NotEmpty | 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) | | @NotBlank | 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應用于字符串且在比較時會去除字符串的空格 | | @Email | 驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式 |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看