日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

API接口參數(shù)驗(yàn)證的必備神器,讓你的代碼更高效!

來源: 責(zé)編: 時(shí)間:2023-11-07 09:13:52 261觀看
導(dǎo)讀環(huán)境:Springboot2.6.121. 簡介Spring Validation是一種輕量級(jí)的數(shù)據(jù)驗(yàn)證框架,主要用于對(duì)Java對(duì)象進(jìn)行校驗(yàn)。它為數(shù)據(jù)驗(yàn)證提供了統(tǒng)一的接口和基本的校驗(yàn)功能,解決了數(shù)據(jù)校驗(yàn)這一常見問題,讓開發(fā)人員能夠方便地對(duì)數(shù)據(jù)進(jìn)行驗(yàn)

環(huán)境:Springboot2.6.12XDz28資訊網(wǎng)——每日最新資訊28at.com

1. 簡介

Spring Validation是一種輕量級(jí)的數(shù)據(jù)驗(yàn)證框架,主要用于對(duì)Java對(duì)象進(jìn)行校驗(yàn)。它為數(shù)據(jù)驗(yàn)證提供了統(tǒng)一的接口和基本的校驗(yàn)功能,解決了數(shù)據(jù)校驗(yàn)這一常見問題,讓開發(fā)人員能夠方便地對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,從而保證數(shù)據(jù)的有效性和安全性。XDz28資訊網(wǎng)——每日最新資訊28at.com

Spring Validation提供了一套注解,用于對(duì)Java對(duì)象進(jìn)行校驗(yàn),支持嵌套校驗(yàn)和分組校驗(yàn),支持國際化和自定義注解和校驗(yàn)器,可以滿足各種復(fù)雜的校驗(yàn)需求。它的主要特點(diǎn)包括:XDz28資訊網(wǎng)——每日最新資訊28at.com

  1. 輕量級(jí):Spring Validation只做驗(yàn)證相關(guān)的事情,不包含復(fù)雜的業(yè)務(wù)邏輯。
  2. 簡單易用:基于注解,簡潔明了,易于維護(hù)。
  3. 校驗(yàn)規(guī)則靈活:支持自定義校驗(yàn)規(guī)則,可擴(kuò)展性強(qiáng)。
  4. 支持國際化:根據(jù)不同的語言環(huán)境,使用不同的校驗(yàn)提示消息。
  5. 集成Hibernate Validator:Spring Validation默認(rèn)使用Hibernate Validator作為其具體的實(shí)現(xiàn),可以輕松地與其他數(shù)據(jù)驗(yàn)證框架一起工作。

XDz28資訊網(wǎng)——每日最新資訊28at.com

Bean Validation 為Java應(yīng)用程序提供了一種通過約束聲明和元數(shù)據(jù)進(jìn)行驗(yàn)證的通用方法。要使用它,只需要對(duì)POJO屬性進(jìn)行注釋,然后由運(yùn)行時(shí)強(qiáng)制執(zhí)行這些約束。有內(nèi)置的約束,你也可以定義自己的自定義約束。如下所示:XDz28資訊網(wǎng)——每日最新資訊28at.com

public class Person {  @NotNull  @Size(max=64)  private String name;  @Min(0)  private int age;}

Bean驗(yàn)證驗(yàn)證器然后根據(jù)聲明的約束驗(yàn)證此類的實(shí)例。有關(guān)API的一般信息,請(qǐng)參見Bean驗(yàn)證。有關(guān)特定約束,請(qǐng)參閱Hibernate驗(yàn)證程序文檔。XDz28資訊網(wǎng)——每日最新資訊28at.com

配置Bean驗(yàn)證提供程序

Spring提供了對(duì)Bean驗(yàn)證API的全面支持,包括將Bean驗(yàn)證提供者作為Spring Bean。這使你可以在應(yīng)用程序中需要驗(yàn)證的任何位置注入javax.validation.ValidatorFactory或javax.validation.Validator。XDz28資訊網(wǎng)——每日最新資訊28at.com

你可以使用LocalValidatorFactoryBean將默認(rèn)驗(yàn)證器配置為Spring Bean,如下例所示:XDz28資訊網(wǎng)——每日最新資訊28at.com

import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;@Configurationpublic class AppConfig {  @Bean  public LocalValidatorFactoryBean validator() {    return new LocalValidatorFactoryBean();  }}

上面的示例中的基本配置使用默認(rèn)引導(dǎo)機(jī)制觸發(fā)bean驗(yàn)證進(jìn)行初始化。Bean驗(yàn)證提供程序(如Hibernate驗(yàn)證程序)應(yīng)該出現(xiàn)在類路徑中,并被自動(dòng)檢測(cè)到。XDz28資訊網(wǎng)——每日最新資訊28at.com

XDz28資訊網(wǎng)——每日最新資訊28at.com

2. 注入 Validator

XDz28資訊網(wǎng)——每日最新資訊28at.com

@Servicepublic class PersonService {  // inject javaee validator object  @Resource  private Validator validator ;  // inject spring validator object  @Resource  private org.springframework.validation.Validator valid ;}

簡單實(shí)例

接著上面的配置,我們只需要做驗(yàn)證動(dòng)作即可。XDz28資訊網(wǎng)——每日最新資訊28at.com

@Servicepublic class PersonService {  @Resource  private Validator validator ;  @Resource  private org.springframework.validation.Validator valid ;  public void validator(Person person) {    Set<ConstraintViolation<Person>> res = validator.validate(person) ;    res.forEach(cv -> {      System.out.println(cv.getMessage()) ;    });    System.out.println("----------------------") ;    BindingResult errors = new MapBindingResult(new HashMap<String, Object>(), "person") ;    valid.validate(person, errors) ;    if (errors.hasErrors()) {      errors.getAllErrors().forEach(oe -> {        System.out.println(oe.getDefaultMessage()) ;      });    }  }}

測(cè)試

@SpringBootTestclass SpringBootValidationApplicationTests {  @Resource  private PersonService ps ;  @Test  public void testValidator() {    Person person = new Person() ;    person.setAge(-1);    ps.validator(person) ;  }}
最小不能小于0不能為null----------------------最小不能小于0不能為null

3. 自定義注解驗(yàn)證

每個(gè)Bean驗(yàn)證約束由兩部分組成:XDz28資訊網(wǎng)——每日最新資訊28at.com

  • 聲明約束及其可配置屬性的@Constraint注釋。
  • 實(shí)現(xiàn)約束行為的javax.validation.ConstraintValidator接口的實(shí)現(xiàn)。

要將聲明與實(shí)現(xiàn)關(guān)聯(lián),每個(gè)@Constraint注釋都會(huì)引用相應(yīng)的ConstraintValidator實(shí)現(xiàn)類。在運(yùn)行時(shí),當(dāng)域模型中遇到約束注釋時(shí),ConstraintValidatorFactory將實(shí)例化引用的實(shí)現(xiàn)。下面的示例實(shí)現(xiàn)一個(gè)前綴匹配的驗(yàn)證邏輯:XDz28資訊網(wǎng)——每日最新資訊28at.com

XDz28資訊網(wǎng)——每日最新資訊28at.com

自定義注解XDz28資訊網(wǎng)——每日最新資訊28at.com

@Target({ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PrefixConstraintValidator.class)public @interface PrefixConstraint {  String value() default "" ;  // 這里的{validator.prefix.error}就是資源文件中定義的錯(cuò)誤信息  String message() default "{validator.prefix.error}";  Class<?>[] groups() default { };  Class<? extends Payload>[] payload() default { };}

以上的注解屬性都是必須的。XDz28資訊網(wǎng)——每日最新資訊28at.com

注意message屬性是我們將發(fā)生錯(cuò)誤后錯(cuò)誤信息定義在配置文件中,而該文件的basename必須是ValidationMessages,如果你需要國際化支持,那么就這樣命名:ValidationMessages_zh_CN.properties。XDz28資訊網(wǎng)——每日最新資訊28at.com

XDz28資訊網(wǎng)——每日最新資訊28at.com

自定義驗(yàn)證器

public class PrefixConstraintValidator implements ConstraintValidator<PrefixConstraint, CharSequence> {  @Resource  private DataService ds ;  private String prefix ;  @Override  public boolean isValid(CharSequence value, ConstraintValidatorContext context) {    ds.ak() ;    if ( value == null ) {      return false ;    }    return ((String) value).startsWith(prefix) ;  }  @Override  public void initialize(PrefixConstraint pc) {    prefix = pc.value() ;  }}

驗(yàn)證器必須實(shí)現(xiàn)ConstraintValidator接口,該接口是泛型接口,第一個(gè)參數(shù)是該驗(yàn)證器要用于在那個(gè)注解,第二個(gè)參數(shù)是該注解應(yīng)用在什么數(shù)據(jù)類型上。注意:在自定義驗(yàn)證器中我們是可以隨意地注入其它Bean對(duì)象,是不是很強(qiáng)大?XDz28資訊網(wǎng)——每日最新資訊28at.com

基于方法級(jí)的驗(yàn)證

你可以通過MethodValidationPostProcessor Bean定義將Bean validation 1.1(以及Hibernate Validator 4.3的自定義擴(kuò)展)支持的方法驗(yàn)證功能集成到Spring上下文中:XDz28資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic MethodValidationPostProcessor validationPostProcessor() {  return new MethodValidationPostProcessor();}@Service@Validatedpublic class PersonService {  @NotNull(message = "返回值不能為空")  public Person findPerson(@NotEmpty(message = "ID 不能為空") String id) {    return null ;  }}

注意:類上必須有@Validated注解;因?yàn)樯厦娴腂eanPostProcessor中定義的Advisor(DefaultPointcutAdvisor)使用的切入的Pointcut在類級(jí)別上過濾條件是必須有@Validated注解,而方法則是攔截所有的方法。XDz28資訊網(wǎng)——每日最新資訊28at.com

XDz28資訊網(wǎng)——每日最新資訊28at.com

測(cè)試

圖片XDz28資訊網(wǎng)——每日最新資訊28at.com

這里是拋出的異常javax.validation.ConstraintViolationException,所有我們需要一個(gè)全局的異常攔截器來對(duì)異常做處理。XDz28資訊網(wǎng)——每日最新資訊28at.com

其他配置選項(xiàng)

默認(rèn)的LocalValidatoryFactoryBean配置對(duì)于大多數(shù)情況都足夠了。對(duì)于各種Bean驗(yàn)證構(gòu)造,有許多配置選項(xiàng),從消息插值到遍歷解析。有關(guān)這些選項(xiàng)的更多信息,請(qǐng)參閱LocalValidatorFactoryBean Javadoc。XDz28資訊網(wǎng)——每日最新資訊28at.com

https://docs.spring.io/spring-framework/docs/5.3.11/javadoc-api/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.htmlXDz28資訊網(wǎng)——每日最新資訊28at.com

XDz28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-17391-0.htmlAPI接口參數(shù)驗(yàn)證的必備神器,讓你的代碼更高效!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 了不起的Base64

下一篇: 使用漏桶算法實(shí)現(xiàn)一秒鐘50個(gè)限流

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一篇聊聊Go錯(cuò)誤封裝機(jī)制

    %w 是用于錯(cuò)誤包裝(Error Wrapping)的格式化動(dòng)詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個(gè)特殊格式化動(dòng)詞,用于將一個(gè)錯(cuò)誤(或其他可打印的值)包裝在一個(gè)新的錯(cuò)誤中。使
  • 十個(gè)簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或類的行為。裝飾器本質(zhì)上是一個(gè)函數(shù),它接受另一個(gè)函數(shù)或類作為參數(shù),并返回一個(gè)新的函數(shù)或類。它們通常用
  • 共享單車的故事講到哪了?

    來源丨海克財(cái)經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國內(nèi)熱點(diǎn)新聞關(guān)照到了。除了一再漲價(jià)和用戶直呼用不起了。近日多家媒體再發(fā)報(bào)道稱,成都、天津、鄭州等地多個(gè)共享單
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內(nèi)的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項(xiàng)。通過上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網(wǎng)消息,據(jù)彭博社報(bào)道,在8月3日印度突然禁止在沒有許可證的情況下向印度進(jìn)口電腦/平板及顯示器等產(chǎn)品后,蘋果、三星電子和惠普等大公司暫停向印度
  • 三星電子Q2營收60萬億韓元 存儲(chǔ)業(yè)務(wù)營收同比仍下滑超過50%

    7月27日消息,據(jù)外媒報(bào)道,從三星電子所發(fā)布的財(cái)報(bào)來看,他們主要利潤來源的存儲(chǔ)芯片業(yè)務(wù)在今年二季度仍不樂觀,營收同比仍在大幅下滑,所在的設(shè)備解決方案
  • 英特爾Xe-HP項(xiàng)目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報(bào)道,英特爾高級(jí)副總裁兼加速計(jì)算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • 聯(lián)想小新Pad Pro 12.6將要推出,搭載高通驍龍 870 處理器

    聯(lián)想小新Pad Pro 12.6將于秋季新品會(huì)上推出,官方按照慣例直接在發(fā)布會(huì)前給出了機(jī)型的所有參數(shù)。聯(lián)想小新 Pad Pro 12.6 將搭載高通驍龍 870 處理器,重量為 5
Top 主站蜘蛛池模板: 漳浦县| 大余县| 南岸区| 梁山县| 札达县| 玛纳斯县| 会东县| 遵义市| 枣庄市| 高青县| 佛学| 南皮县| 六盘水市| 东山县| 济源市| 曲阳县| 榆社县| 漠河县| 兰考县| 滨州市| 苍溪县| 西华县| 芦溪县| 宝丰县| 苏尼特右旗| 怀集县| 星子县| 洪洞县| 黔西县| 磐安县| 松滋市| 米泉市| 临夏县| 广州市| 敦化市| 道孚县| 建湖县| 阳西县| 紫阳县| 肥乡县| 汝阳县|