<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文帶你快速入手 Spring Boot 參數(shù)校驗

          共 2420字,需瀏覽 5分鐘

           ·

          2019-12-19 23:26

          0d6d6078cf4cc75d1d44e14726e99912.webp

          08cbc9beb3e294929b244803d6379092.webp

          作者:狂亂的貴公子?

          來源:cnblogs.com/cjsblog/p/8946768.html


          • 1、背景介紹
          • 2、Spring Boot文檔中的Validation
          • 3、Hibernate Validator
          • 4、Spring Validator
          • 5、示例
          • 6、補充
          • 參考

          1、背景介紹

          開發(fā)過程中,后臺的參數(shù)校驗是必不可少的,所以經(jīng)常會看到類似下面這樣的代碼

          9c170dfcab77f2f1ce24a7dbd37e367a.webp

          這樣寫并沒有什么錯,還挺工整的,只是看起來不是很優(yōu)雅而已。

          接下來,用Validation來改寫這段

          2、Spring Boot文檔中的Validation

          Spring Boot的官網(wǎng)中,關(guān)于Validation只是簡單的提了一句,如下

          58f8cb231b16e07d7dfb2110b3fc68fb.webp

          其實,Spring Validator?和**Hibernate?Validator** 是兩套Validator,可以混著用,這里我們用**Hibernate?Validator**

          3、Hibernate Validator

          https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface

          4、Spring Validator

          https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation

          5、示例

          5.1、引入spring-boot-starter-validation

          0b1e73bfe7c44d1e48bb06f2a4191641.webp

          5.2、定義一個對象

          5ef7df5f2068b25a12071a80ef6f0628.webp

          5.3、適用@Valid校驗,并將校驗結(jié)果放到BindingResult對象中

          80098f38fa59aa8daae249314ec0a657.webp

          注意:

          • 默認情況下,如果校驗失敗會拋javax.validation.ConstraintViolationException異常,可以用統(tǒng)一異常處理去對這些異常做處理
          • An Errors/BindingResult argument is expected to be declared immediately after the model attribute

          5.4、看效果

          bd814694c5a63517ad57637701802716.webp07322e6e2ad31964818a715394fe9952.webp

          如果在校驗的對象后面再加上Model對象的話,如果返回的是ModelAndView就可以將這個Model設(shè)置到其中,這樣在頁面就可以取到錯誤消息了

          cece676f6325150c64b63fc2e804e5b4.webp

          僅僅只是單字段校驗的話未免也太不靈活了吧,如果字段之間有關(guān)聯(lián)關(guān)系,那該如何校驗?zāi)兀看鸢甘亲远x

          5.5、自定義校驗規(guī)則

          https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints

          5f5021c2d4bf508f89801acb1fa810e0.webp

          這里,以優(yōu)惠券創(chuàng)建為例來演示如何自定義校驗規(guī)則

          首先,優(yōu)惠券表單如下(僅僅只是演示用):

          b5fb021feec83a423db4e1fcb44535ed.webp

          這里除了自定義了兩條校驗規(guī)則之外,還用到了分組。

          為什么要有分組這一說呢?因為,舉個例子,添加的時候不需要校驗id,而修改的時候id不能為空,有了分組以后,就可以添加的時候校驗用組A,修改的時候校驗用組B

          下面重點看一下@CheckTimeInterval

          第一步?、定義一個注解叫CheckTimeInterval

          c68764f24f3c4cf92f3d51cef469ce87.webp

          第二步?、定義Validator去校驗它

          6efa5ad67a8f08ffa7e10fbc655adaa5.webp

          順便提一句,這里BeanWrapper去取對象的屬性值,我們稍微看一下BeanWrapper是做什么的

          a77bfc459ea7ce21e99a19c1b6e437d4.webp7882a18df55a777d6524d4bd5aa08f73.webp

          言歸正傳

          第三步?、驗證

          8e6b5c5cbf4035f60f68315f2cd98500.webp09ff2582b4c3e4a3d43cf7686e33c527.webp9228a87ac7c31299a9164ba08fc6a647.webp

          看,自定義的校驗生效了

          6、補充

          6.1、校驗?zāi)J?/span>

          https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast

          下面補充一點,關(guān)于校驗?zāi)J?/p>

          默認會校驗完所有屬性,然后將錯誤信息一起返回,但很多時候不需要這樣,一個校驗失敗了,其它就不必校驗了

          為此,需要這樣設(shè)置

          4e202f9c9694ddae126331d614c9c617.webp

          6.2、單個參數(shù)校驗

          80221b82633554f137b6bf7259d34a7b.webpf1b2f17cf522547129c77391a45b9792.webpb51aa33596dcfec1dfbde56797702b8c.webp

          如果是調(diào)整頁面的時候參數(shù)校驗失敗的話,這時可以不做處理,讓其調(diào)到錯誤頁面。

          如果是接口參數(shù)校驗失敗的話,可以在這里進行統(tǒng)一處理,并返回。例如:

          14e63d641ba17ce195afe848ef703347.webp

          6.3、錯誤頁面

          6bb5f27c84b4b15163187a211019e6da.webpa5a520f921b92d0d2084aee09ab4855c.webp

          以剛才優(yōu)惠券詳情為例

          http://localhost:8080/coupon/detail.html      400

          http://localhost:8080/coupon/detail.html?id=    400

          http://localhost:8080/coupon/detail.html?id=abc   400

          http://localhost:8080/coupon/detail222.html?id=123  404

          無權(quán)限  403

          int a = 1 / 0;  500

          6.4、@Valid與@Validated

          https://blog.csdn.net/qq_27680317/article/details/79970590

          參考

          http://rensanning.iteye.com/blog/2357373

          https://blog.csdn.net/kenight/article/details/77774465

          https://www.cnblogs.com/mr-yang-localhost/p/7812038.html

          https://www.phpsong.com/3567.html

          https://www.cnblogs.com/mr-yang-localhost/p/7812038.html


          - End -

          a58bf512829d5431e2e803e68cd5444d.webp

          術(shù)轉(zhuǎn)


          Maven系列教程??點擊-->?Maven技術(shù)干貨連載目錄?跳轉(zhuǎn)


          MyBatis系列教程??點擊-->?MyBatis技術(shù)干貨連載目錄?跳轉(zhuǎn)


          JVM調(diào)優(yōu)總結(jié)系列教程??點擊-->?JVM調(diào)優(yōu)技術(shù)干貨連載目錄?跳轉(zhuǎn)





          ,?e9abb2f542c3f59f346dc9b22a254112.webp

          瀏覽 133
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品久久久久无码AV铜川 | 97人人操人人操 | 精品视频一区二区三区四区 | 日本极品视频 | 国产的内射 |