JAVA中通過Hibernate-Validation進行參數(shù)驗證
成都創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。10年品質(zhì),值得信賴!
在開發(fā)JAVA服務(wù)器端代碼時,我們會遇到對外部傳來的參數(shù)合法性進行驗證,而hibernate-validator提供了一些常用的參數(shù)校驗注解,我們可以拿來使用。
1.maven中引入hibernate-validator對應(yīng)的jar:
dependency
groupIdorg.hibernate/groupId
artifactIdhibernate-validator/artifactId
version4.3.1.Final/version
/dependency
2.在Model中定義要校驗的字段(即該字段不能為空,并且最大長度為14):
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
public class PayRequestDto {
/**
* 支付完成時間
**/
@NotEmpty(message="支付完成時間不能空")
@Size(max=14,message="支付完成時間長度不能超過{max}位")
private String payTime;
public String getPayTime() {
return payTime;
}
public void setPayTime(String payTime) {
this.payTime = payTime;
}
}
3.定義Validation工具類:
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.HibernateValidator;
import com.atai.framework.lang.AppException;
public class ValidationUtils {
/**
* 使用hibernate的注解來進行驗證
*
*/
private static Validator validator = Validation
.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
/**
* 功能描述: br
* 〈注解驗證參數(shù)〉
*
* @param obj
* @see [相關(guān)類/方法](可選)
* @since [產(chǎn)品/模塊版本](可選)
*/
public static T void validate(T obj) {
SetConstraintViolationT constraintViolations = validator.validate(obj);
// 拋出檢驗異常
if (constraintViolations.size() 0) {
throw new AppException("0001", String.format("參數(shù)校驗失敗:%s", constraintViolations.iterator().next().getMessage()));
}
}
}
4.在代碼中調(diào)用工具類進行參數(shù)校驗:
ValidationUtils.validate(requestDto);
以下是對hibernate-validator中部分注解進行描述:
@AssertTrue 用于boolean字段,該字段只能為true
@AssertFalse 該字段的值只能為false
@CreditCardNumber 對信用卡號進行一個大致的驗證
@DecimalMax 只能小于或等于該值
@DecimalMin 只能大于或等于該值
@Digits(integer=,fraction=) 檢查是否是一種數(shù)字的整數(shù)、分數(shù),小數(shù)位數(shù)的數(shù)字
@Email 檢查是否是一個有效的email地址
@Future 檢查該字段的日期是否是屬于將來的日期
@Length(min=,max=) 檢查所屬的字段的長度是否在min和max之間,只能用于字符串
@Max 該字段的值只能小于或等于該值
@Min 該字段的值只能大于或等于該值
@NotNull 不能為null
@NotBlank 不能為空,檢查時會將空格忽略
@NotEmpty 不能為空,這里的空是指空字符串
@Null 檢查該字段為空
@Past 檢查該字段的日期是在過去
@Pattern(regex=,flag=) 被注釋的元素必須符合指定的正則表達式
@Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內(nèi)
@Size(min=, max=) 檢查該字段的size是否在min和max之間,可以是字符串、數(shù)組、集合、Map等
@URL(protocol=,host,port) 檢查是否是一個有效的URL,如果提供了protocol,host等,則該URL還需滿足提供的條件
@Valid 該注解主要用于字段為一個包含其他對象的集合或map或數(shù)組的字段,或該字段直接為一個其他對象的引用,這樣在檢查當前對象的同時也會檢查該字段所引用的對象
實現(xiàn)方法:最簡單的校驗就是把原始數(shù)據(jù)和待比較數(shù)據(jù)直接進行比較,看是否完全一樣這種方法是最安全最準確的。同時也是效率最低的。
應(yīng)用例子:龍珠cpu在線調(diào)試工具bbug.exe。它和龍珠cpu間通訊時,bbug發(fā)送一個字節(jié)cpu返回收到的字節(jié),bbug確認是剛才發(fā)送字節(jié)后才繼續(xù)發(fā)送下一個字節(jié)的。 實現(xiàn)方法:在數(shù)據(jù)存儲和傳輸中,字節(jié)中額外增加一個比特位,用來檢驗錯誤。校驗位可以通過數(shù)據(jù)位異或計算出來。
應(yīng)用例子:單片機串口通訊有一模式就是8位數(shù)據(jù)通訊,另加第9位用于放校驗值。
bcc異或校驗法(block check character)
實現(xiàn)方法:很多基于串口的通訊都用這種既簡單又相當準確的方法。它就是把所有數(shù)據(jù)都和一個指定的初始值(通常是0)異或一次,最后的結(jié)果就是校驗值,通常把它附在通訊數(shù)據(jù)的最后一起發(fā)送出去。接收方收到數(shù)據(jù)后自己也計算一次異或和校驗值,如果和收到的校驗值一致就說明收到的數(shù)據(jù)是完整的。
校驗值計算的代碼類似于:
unsigned uCRC=0;//校驗初始值
for(int i=0;iDataLenth;i++) uCRC^=Data[i];
適用范圍:適用于大多數(shù)要求不高的數(shù)據(jù)通訊。
應(yīng)用例子:ic卡接口通訊、很多單片機系統(tǒng)的串口通訊都使用。 (Cyclic Redundancy Check)
實現(xiàn)方法:這是利用除法及余數(shù)的原理來進行錯誤檢測的
當類加載器將新加載的Java平臺類的字節(jié)碼傳遞給虛擬機時,這些字節(jié)碼首先要接受校驗器(verifier)的校驗。校驗器負責檢查那些指令無法執(zhí)行的明顯有破壞性的操作。除了系統(tǒng)類外,所有的類都要被校驗,不過,可以使用非正式的-noverify選項來鈍化校驗。
例如,可以使用下面的命令行:
java -noverify Hello
下面是校驗器執(zhí)行的一些檢查:
變量要在使用之前進行初始化。
方法調(diào)用與對象引用類型之間要匹配。
訪問私有數(shù)據(jù)和方法的規(guī)則沒有被違反。
對本地變量的訪問都在運行時堆棧內(nèi)。
運行時堆棧沒有溢出。
如果以上這些檢查中任何一條沒有通過,那么該類就被認為遭到了破壞,并且不予加載。
目前由于軟件測試工作在軟件的生產(chǎn)過程中越來越重要,很多軟件測試工具應(yīng)運而生,這里介紹一下目前最流行的一些軟件測試工具,一個十個,介紹如下:一、企業(yè)級自動化測試工具WinRunner這款軟件是MercuryInteractive公司的。
WinRunner是一種企業(yè)級的功能測試工具,用于檢測應(yīng)用程序是否能夠達到預(yù)期的功能及正常運行。
通過自動錄制、檢測和回放用戶的應(yīng)用操作,WinRunner能夠有效地幫助測試人員對復(fù)雜的企業(yè)級應(yīng)用的不同發(fā)布版進行測試,提高測試人員的工作效率和質(zhì)量,確保跨平臺的、復(fù)雜的企業(yè)級應(yīng)用無故障發(fā)布及長期穩(wěn)定運行。
二、工業(yè)標準級負載測試工具Loadrunner這款軟件是惠普公司開發(fā)的。
LoadRunner是一種預(yù)測系統(tǒng)行為和性能的負載測試工具。
通過以模擬上千萬用戶實施并發(fā)負載及實時性能監(jiān)測的方式來確認和查找問題,LoadRunner能夠?qū)φ麄€企業(yè)架構(gòu)進行測試。
通過使用LoadRunner,企業(yè)能最大限度地縮短測試時間,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周期。
三、功能測試工具RationalRobotIBMRationalRobot是業(yè)界最頂尖的功能測試工具,它甚至可以在測試人員學習高級腳本技術(shù)之前幫助其進行成功的測試。
它集成在測試人員的桌面IBMRationalTestManager上,在這里測試人員可以計劃、組織、執(zhí)行、管理和報告所有測試活動,包括手動測試報告。
這種測試和管理的雙重功能是自動化測試的理想開始。
四、功能測試工具SilkTestBorlandSilkTest2006屬于軟件功能測試工具,是Borland公司所提出軟件質(zhì)量管理解決方案的套件之一。
這個工具采用精靈設(shè)定與自動化執(zhí)行測試,無論是程序設(shè)計新手或資深的專家都能快速建立功能測試,并分析功能錯誤。
五、功能和性能測試的工具JMeterJMeter是Apache組織的開放源代碼項目,它是功能和性能測試的工具,100%的用java實現(xiàn)。
六、單元測試工具xUnit系列目前的最流行的單元測試工具是xUnit系列框架,常用的根據(jù)語言不同分為JUnit(java),CppUnit(C++),DUnit(Delphi),NUnit(.net),PhpUnit(Php)等等。
該測試框架的第一個和最杰出的應(yīng)用就是由ErichGamma(《設(shè)計模式》的作者)和KentBeck(XP(ExtremeProgramming)的創(chuàng)始人)提供的開放源代碼的JUnit.七、全球測試管理系統(tǒng)testdirectorTestDirector是業(yè)界第一個基于Web的測試管理系統(tǒng),它可以在您公司內(nèi)部或外部進行全球范圍內(nèi)測試的管理。
通過在一個整體的應(yīng)用系統(tǒng)中集成了測試管理的各個部分,包括需求管理,測試計劃,測試執(zhí)行以及錯誤跟蹤等功能,TestDirector極大地加速了測試過程。
八、自動化白盒測試工具JtestJtest是parasoft公司推出的一款針對java語言的自動化白盒測試工具,它通過自動實現(xiàn)java的單元測試和代碼標準校驗,來提高代碼的可靠性。
parasoft同時出品的還有C++test,是一款C/C++白盒測試工具。
九、性能測試工具WASMicrosoftWebApplicationStressTool是由微軟的網(wǎng)站測試人員所開發(fā),專門用來進行實際網(wǎng)站壓力測試的一套工具。
透過這套功能強大的壓力測試工具,您可以使用少量的Client端計算機仿真大量用戶上線對網(wǎng)站服務(wù)所可能造成的影響。
十、性能測試和分析工具WEBLODEwebload是RadView公司推出的一個性能測試和分析工具,它讓web應(yīng)用程序開發(fā)者自動執(zhí)行壓力測試;webload通過模擬真實用戶的操作,生成壓力負載來測試web的性能。