1. 程式人生 > >控制hibernate validation校驗順序

控制hibernate validation校驗順序

背景

       專案使用的是hibernate validation校驗框架(不懂的可以參考這篇文章:Bean Validation)。對二維碼id的校驗,需要校驗長度及非法字元。由於非法字元是通過正則表示式匹配的,存在效率不高的問題,需要控制下校驗順序,即先校驗長度,然後再校驗正則表示式。

解決方案

       hibernage validtaion框架有校驗分組的概念,指定校驗註解的時候可以加上分組,如果沒有指定,那麼預設是Default分組。我們先建立一個分組:

public interface Extended{}

然後校驗註解指定屬於這個分組:

@Length(min=3,max=100) // @Length沒有指定group,則屬於Default分組
@CharValid(groups = Extended.class) // @CharValid是個自定義校驗註解
String id;

然後建立一個分組順序:

@GroupSequence({Default.class, Extended.class})
public interface MySequence {}

通過@GroupSequence指定分組順序,例如這裡先校驗Default分組,再校驗Extended分組。然後將這個順序作為引數傳入校驗方法:

validator.validate(object, MySequence.class);

 問題:

        雖然指定了校驗順序,但是還是會去校驗@CharValid註解,還是會導致效率問題。這裡需要讓@Length校驗不通過時就直接返回,因此需要把校驗模式改為快速失敗:

// 原來的validator獲取方式
//ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
//validator = factory.getValidator();

validator = Validation.byProvider( HibernateValidator.class )
                .configure()
                .failFast( true ) // 設定快速失敗
                .buildValidatorFactory()
                .getValidator();

這樣一來@Length校驗不通過的話,就不會再去校驗後面的東西了,直接返回結果。

相關推薦

控制hibernate validation順序

背景        專案使用的是hibernate validation校驗框架(不懂的可以參考這篇文章:Bean Validation)。對二維碼id的校驗,需要校驗長度及非法字元。由於非法字元是通過正則表示式匹配的,存在效率不高的問題,需要控制下校驗順序,即先校驗長度,

hibernate框架validation 和 HttpMessageConverter的配置方式

hibernate的校驗框架validation 和 httpmessageconverter的配置方式hibernate的校驗框架validation 和 HttpMessageConverter的配置方式好像是2個不相幹的配置內容,但他們都用到了<mvc:annotation-driven />

springboot使用hibernate validator

配置 瀏覽器 .project else 12px 使用 很多 大於等於 ber 一、參數校驗 在開發中經常需要寫一些字段校驗的代碼,比如字段非空,字段長度限制,郵箱格式驗證等等,寫這些與業務邏輯關系不大的代碼個人感覺有兩個麻煩: 驗證代碼繁瑣,重復勞動 方法內

springmvc 註解開發之 validation

專案中使用較多的是前端的校驗,比如頁面中js校驗。對於安全要求較高的建議在服務端進行校驗。 服務端校驗:   控制層controller:校驗頁面請求的引數的合法性,在服務端控制層controller校驗,不區分客戶端型別(瀏覽器、手機客戶端、遠端呼叫)  業務層se

Spring Boot 全域性異常處理 與 Hibernate Validator框架整合

Hibernate Validator校驗框架的使用 Spring boot已經集成了hibernate-validator,不需要引入maven,其他框架也可以自己引入: <dependency> <groupId>org.h

SpringMVC框架(2)之(2.3 Validation器)

Validation校驗器 SpringMVC使用 JSR-303 校驗規範,使用是 Hibernate Validator 【1】設定環境: 1.導jar包; 2.在處理器介面卡中配置校驗器; 3.建立資原始檔(eg:CustomValiationMessages.properti

Hibernate-validator框架

1. 前言 Validator開發者使用手冊,適用後臺校驗功能的開發參考。文件中提到的功能,都是經過嚴謹測試驗證過的,保證可用,請開發人員放心設計和開發。 1.1. 背景 在我們日常後臺的開發中,涉及到很多的欄位驗證,一般普通的驗證框架就基本上可以滿足日常的開發需求,但

validation----可以用來對於請求bean的必填引數進行

validation的另一種用法,這種用法更加簡單便捷校驗工具類: package com.alibaba.banff.web.util; import java.util.HashMap; import java.util.Map; import java.

自定義Hibernate Validator註解

定義註解 package com.futao.springmvcdemo.annotation; import com.futao.springmvcdemo.annotation.impl.IllegalValueCheckImpl; import c

高效使用hibernate-validator框架

一、前言   高效、合理的使用hibernate-validator校驗框架可以提高程式的可讀性,以及減少不必要的程式碼邏輯。接下來會介紹一下常用一些使用方式。 二、常用註解說明 限制 說明 @Null 限制只能為

ssm之路(19)服務端validation

校驗通常是前端校驗,比如js校驗,但對於安全要求較高的建議在服務端進行校驗 controller層:校驗檢驗頁面請求的引數型別的合法性(頁面提交的東西) service層:(使用較多)檢驗關鍵業務引數 dao層:一般不校驗: springmvc使用了hibernate

@Validation後端資料

一、@Validation的簡單運用 1.引入依賴pom.xml <!-- 資料校驗依賴 hibernate validatorjar包--> <dependency> <groupId>javax.validation</gr

spring boot validation

spring boot validation校驗 大部分校驗資料一般都是在前端校驗,個人認為後臺校驗的多處場景應該在安全上,防止post進入。 spring boot validation校驗主要有四步。 一、新增依賴 <dependency> <gr

Spring MVC 使用Hibernate框架錯誤:版本不相容

  context: TestDome   delegate: false ----------> Parent Classloader: [email protected] ]     at org.springframewo

validation規則

空檢查 @Null 驗證物件是否為null @NotNull 驗證物件是否不為null, 無法查檢長度為0的字串 @NotBlank 檢查約束字串是不是Null還有被Trim的長度是否大於0,只對字串,且會去掉前後空格. @NotEmp

angular-validation數字

<input type="number" min="0" max="100" maxlength="5" class="number" ng-model="formData.age" valida

第十四篇: Spring Boot使用框架validation

Spring Boot在內部通過整合hibernate-validation已經實現了JSR-349驗證規範介面,在Spring Boot專案中只要直接使用就行了。一般用在Controller中用於驗證前端傳來的引數。驗證分兩種:對封裝的Bean進行驗證  或者  對方法簡單

005-優化web請求一-gzip壓縮、http緩存控制和緩存[Pragma、Expires、Cache-Control、max-age、Last-Modified、用戶刷新訪問、避免過度304]

無法 新鮮度 開發者模式 請求報文 XML 自定義 server clas 存在   優化Web應用的典型技術:緩存控制頭信息、Gzip、應用緩存、ETag、反應型技術【異步方法調用和WebSocket】 一、模板緩存 spring.thymeleaf.cache=

element Form表單自定義(針對區域性輸入控制元件區域性

最近幫朋友看一個vue專案,需要在整個表單的一個輸入控制元件上新增校驗,因為表單是動態建立的,就沒有考慮整個表單繫結rules,而是在<el-form-item>上綁定了rules,具體程式碼如下: template/html部分: <el-form-i

springmvc使用框架validation

1      springmvc校驗(服務端 ) b/s系統中對http請求資料的校驗多數在客戶端進行,這也是出於簡單及使用者體驗性上考慮,但是在一些安全性要求高的系統中服務端校驗是不可缺少的,本節主要學習springmvc實現控制層新增校驗。          Sprin