成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Springboot使用validation優(yōu)雅校驗參數(shù)

IT那活兒 / 2097人閱讀
Springboot使用validation優(yōu)雅校驗參數(shù)
點擊上方藍字關(guān)注我們


 使 用 背 景 


通常我們在編寫后端接口時,一般都需要對參數(shù)(請求數(shù)據(jù))進行校驗。參數(shù)校驗的重要性自然不必多說,先來看一下我們通常是如何進行參數(shù)校驗的?


StringaddUser(User user) {
   //
參數(shù)校驗
  if (user == null || user.getId() == null || user.getAccount() ==null || user.getPassword() == null || user.getEmail() == null) {
      return "
對象或者對象字段不能為空";
  }
   if (StringUtils.isEmpty(user.getAccount()) ||StringUtils.isEmpty(user.getPassword()) ||StringUtils.isEmpty(user.getEmail())) {
       return"
不能輸入空字符串";
  }
   if (user.getAccount().length() < 5 ||user.getAccount().length() > 10) {
       return"
賬號長度必須是5-10個字符";
  }
   if (user.getPassword().length() < 5 ||user.getPassword().length() > 10) {
       return"
密碼長度必須是5-10個字符";
  }
  if(!Pattern.matches("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$",user.getEmail())) {
       return "
郵箱格式不正確";
  }
   //
執(zhí)行業(yè)務(wù)邏輯
  // do something
   return "true";
}


如上所見,我們最常見的做法就是在業(yè)務(wù)層使用if-else進行校驗,這種做法在邏輯上沒有問題,同樣也能實現(xiàn)預(yù)期效果。但是這種做法過于繁瑣,在業(yè)務(wù)層包含了大量的校驗代碼,實在不夠優(yōu)雅,失去了可讀性以及美觀程度。

為了解決這些問題,我們可以使用SpringValidation來改進參數(shù)校驗方式。


 如 何 使 用 


首先,需要引入相關(guān)依賴:


  org.springframework.boot
  spring-boot-starter-validation


引入依賴后我們就可以使用validation了,接下來看下具體使用方式:

  1、為實體類的參數(shù)添加相應(yīng)注解

springvalidation可以很方便的制定校驗規(guī)則,并且能自動完成校驗。我們只要在需要校驗的字段上加入相關(guān)注解,同時可以指定校驗失敗的提示信息。


注:下面表格中列出一些常用校驗注解供參考。

注解

功能

@AssertFalse

可以為null,如果不為null的話必須為false

@AssertTrue

可以為null,如果不為null的話必須為true

@DecimalMax

設(shè)置不能超過最大值

@DecimalMin

設(shè)置不能超過最小值

@Digits

設(shè)置必須是數(shù)字且數(shù)字整數(shù)的位數(shù)和小數(shù)的位數(shù)必須在指定范圍內(nèi)

@Future

日期必須在當前日期的未來

@Past

日期必須在當前日期的過去

@Max

最大不得超過此最大值

@Min

最大不得小于此最小值

@NotNull

不能為null,可以是空

@Null

必須為null

@Pattern

必須滿足指定的正則表達式

@Size

集合、數(shù)組、map等的size()值必須在指定范圍內(nèi)

@Email

必須是email格式

@Length

長度必須在指定范圍內(nèi)

@NotBlank

字符串不能為null,字符串trim()后也不能等于“”

@NotEmpty

不能為null,集合、數(shù)組、mapsize()不能為0;字符串trim()后可以等于“”

@Range

值必須在指定范圍內(nèi)

@URL

必須是一個URL


2、在控制器層進行注解聲明

校驗規(guī)則和錯誤提示信息配置完畢后,只需要在控制器需要校驗的對象上加入@Valid注解即可。


3、統(tǒng)一異常處理

前兩步配置完成后,當傳入?yún)?shù)不滿足校驗規(guī)則時,程序就會拋出MethodArgumentNotValidException異常。我們通過spring統(tǒng)一異常處理,將該異常封裝成規(guī)范響應(yīng)格式。


測試效果:

我們故意傳入一個不符合規(guī)則的參數(shù),可以看到響應(yīng)已經(jīng)符合預(yù)期效果。


 總  結(jié) 


Springboot接口參數(shù)校驗方式改進為validation后,業(yè)務(wù)方法中只包含業(yè)務(wù)邏輯,代碼變得更加簡潔明了;同時降低了代碼耦合度,讓業(yè)務(wù)層只需關(guān)注業(yè)務(wù)邏輯,輕松構(gòu)建后端接口;并且validation提供了很多豐富的校驗規(guī)則,只需要加上注解即可使用,大家可以繼續(xù)查閱官方文檔了解。


END



文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/129984.html

相關(guān)文章

  • 讓Controller支持對平鋪參數(shù)執(zhí)行@Valid數(shù)據(jù)校驗

    摘要:方案一借助對方法級別數(shù)據(jù)校驗的能力首先必須明確一點此能力屬于框架的,而部分框架。 每篇一句 在金字塔塔尖的是實踐,學(xué)而不思則罔,思而不學(xué)則殆(現(xiàn)在很多編程框架都只是教你碎片化的實踐) 相關(guān)閱讀 【小家Java】深入了解數(shù)據(jù)校驗:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【小家Spr...

    printempw 評論0 收藏0
  • @Validated和@Valid的區(qū)別?校驗級聯(lián)屬性(內(nèi)部類)

    摘要:畢竟永遠相信本文能給你帶來意想不到的收獲使用示例關(guān)于數(shù)據(jù)校驗這一塊在中的使用案例,我相信但凡有點經(jīng)驗的程序員應(yīng)該沒有不會使用的,并且還不乏熟練的選手。 每篇一句 NBA里有兩大笑話:一是科比沒天賦,二是詹姆斯沒技術(shù) 相關(guān)閱讀 【小家Java】深入了解數(shù)據(jù)校驗:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validati...

    Winer 評論0 收藏0
  • Spring 參數(shù)校驗最佳實踐(附完整實例)

    摘要:否則非法請求參數(shù)小則影響用戶體驗或者產(chǎn)生垃圾數(shù)據(jù),大則會拖跨整個系統(tǒng)其次,手工對所有的參數(shù)進行校驗相當繁瑣,容易出錯,而且最后,通過工具來完成其實是比較好的方式,但是必須讓工具變得優(yōu)雅一些。 聲明:本文屬原創(chuàng)文章,始發(fā)于公號:程序員自學(xué)之道,同步發(fā)布到 sf,轉(zhuǎn)載請注明出處。 不夠好的方案 在 Web 開發(fā)中, 我們經(jīng)常需要校驗各種參數(shù),這是一件繁瑣又重要的事情,對于很多人來說,在做參...

    tomlingtm 評論0 收藏0
  • SpringBoot 實戰(zhàn) (十五) | 服務(wù)端參數(shù)校驗之一

    摘要:前言估計很多朋友都認為參數(shù)校驗是客戶端的職責,不關(guān)服務(wù)端的事。輕則導(dǎo)致服務(wù)器宕機,重則泄露數(shù)據(jù)。所以,這時就需要設(shè)置第二道關(guān)卡,服務(wù)端驗證了。老項目的服務(wù)端校驗不能為空不能為空看以上代碼,就一個的校驗就如此麻煩。 前言 估計很多朋友都認為參數(shù)校驗是客戶端的職責,不關(guān)服務(wù)端的事。其實這是錯誤的,學(xué)過 Web 安全的都知道,客戶端的驗證只是第一道關(guān)卡。它的參數(shù)驗證并不是安全的,一旦被有心人...

    QiShare 評論0 收藏0
  • Bean Validation完結(jié)篇:你必須關(guān)注的邊邊角角(約束級聯(lián)、自定義約束、自定義校驗器、國際

    摘要:和上標注的約束都會被執(zhí)行注意如果子類覆蓋了父類的方法,那么子類和父類的約束都會被校驗。 每篇一句 沒有任何技術(shù)方案會是一種銀彈,任何東西都是有利弊的 相關(guān)閱讀 【小家Java】深入了解數(shù)據(jù)校驗:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【小家Spring】Spring方法級別數(shù)據(jù)校...

    niuxiaowei111 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<