在SpringBoot中使用FluentValidator驗證插件
前言
在我們編寫項目的時候,在controller中往往離不開對一些數據的校驗。這裏並不是說對於這些數據業務上面的校驗,而是對這些數據進行空校驗或者是長度校驗等。
有些時候校驗可以省略,根據業務的需要進行調整,而多數情況下,服務端對客戶端一直采用的是不信任的策略,所以對很多參數都需要進行校驗。
而校驗的目的就是為了安全有序的執行之後的業務邏輯。從而一定程度的上的減輕數據庫的壓力了,不要讓數據庫成為你校驗數據的工具。
但是這樣的校驗總是顯得很復雜而且很臃腫,復用性也不高,所以我準備使用FluentValidator這個插件幫助我完成這個任務。
已經加入我的github模版中:https://github.com/LinkinStars/springBootTemplate
FluentValidator簡介
FluentValidator是百度的一個開源驗證插件,我習慣這樣叫它,簡單的說,它就是為了校驗數據簡單並且復用而存在的。
通過這個插件,你可以對接收到的數據進行你所需要的校驗,並且返回對應的錯誤信息,同時它還提供一些比較不錯的顯示錯誤的功能。
其實我主要使用它的原因在於,它的復用性高和代碼簡潔。
FluentValidator使用
使用gradle導入依賴
compile (group: ‘com.baidu.unbiz‘, name: ‘fluent-validator-jsr303‘, version: ‘1.0.9‘){
exclude module: ‘slf4j-log4j12‘
新建NotNullStringValidator.java
package com.linkinstars.springBootTemplate.validator;
import com.baidu.unbiz.fluentvalidator.ValidationError;
import com.baidu.unbiz.fluentvalidator.Validator;
import com.baidu.unbiz.fluentvalidator.ValidatorContext;
import com.baidu.unbiz.fluentvalidator.ValidatorHandler;
/**
* 字符串非空校驗
* @author LinkinStar
*/
public class NotNullStringValidator extends ValidatorHandler<String> implements Validator<String> {
//需要被校驗字符串的字段名
private String fieldName;
public NotNullStringValidator(String fieldName) {
this.fieldName = fieldName;
}
/**
* 校驗方法
* @param checkedString 需要被校驗字符串
*/
@Override
public boolean validate(ValidatorContext context, String checkedString){
if (null == checkedString || "" == checkedString) {
context.addError(ValidationError.create(String.format("%s不能為空!", fieldName))
.setErrorCode(-1)
.setField(fieldName)
.setInvalidValue(checkedString));
return false;
}
return true;
}
}
在需要校驗的地方這樣使用
//測試校驗字符串參數
String checkedString = "";
Result validatorResult = FluentValidator.checkAll()
.on(checkedString, new NotNullStringValidator("測試姓名"))
.doValidate()
.result(ResultCollectors.toSimple());
if (!validatorResult.isSuccess()) {
System.out.println(validatorResult.getErrors());
}
如果需要校驗多個字段,直接在.on後面繼續.on即可如
.on(checkedString1, new NotNullStringValidator("測試姓名")).on(checkedString2, new NotNullStringValidator("測試帳號"))如果需要驗證不同的情況,如驗證數字的大小,驗證手機號等,只需編寫新的的Validator的類就可以了這裏只是舉例字符串的簡單校驗而已。
總結
使用這樣的校驗方式,可以在復用很多的校驗規則,同時返回你所需要的錯誤信息,而且它提供了錯誤碼可以自己定義編號,校驗也會變的很清晰。使用的時候要註意下面幾點,首先是要明確校驗的規則,不能盲目的校驗,還有就是有些時候需要特殊校驗的就手動編寫不一定非要都用插件校驗。這個插件還有很多的功能,我只是提出了我所需要的功能和方式,具體更多的用法可以參考:
http://ju.outofmemory.cn/entry/241915
在SpringBoot中使用FluentValidator驗證插件