pure-validation可配置、無侵入、易拓展、熱載入、輕量級動態引數驗證框架(java)
阿新 • • 發佈:2021-11-18
pure-validation一款可配置、無侵入、易拓展、熱載入、輕量級的動態引數驗證框架,可替代hibernate-validation,程式碼總數不足1000行,簡單易學,也可以自行拓展實現更多驗證器validator,有需要star一下。
github: https://github.com/purestackorg/pure-validation
預設包含多個通用驗證實現
<?xml version="1.0" encoding="UTF-8"?> <validators> <validator name="required" class="com.purestack.common.validation.validators.RequiredValidator"/> <validator name="pattern" class="com.purestack.common.validation.validators.PatternValidator"/> <validator name="size" class="com.purestack.common.validation.validators.SizeValidator"/> <validator name="min" class="com.purestack.common.validation.validators.MinValidator"/> <validator name="max" class="com.purestack.common.validation.validators.MaxValidator"/> <validator name="equals" class="com.purestack.common.validation.validators.EqualsValidator"/> <validator name="timestampMax" class="com.purestack.common.validation.validators.TimestampMaxValidator"/> <validator name="timestampMin" class="com.purestack.common.validation.validators.TimestampMinValidator"/> <validator name="decimalMax" class="com.purestack.common.validation.validators.DecimalMaxValidator"/> <validator name="decimalMin" class="com.purestack.common.validation.validators.DecimalMinValidator"/> <validator name="spring" useSpring="true" class="com.purestack.common.validation.validators.SpringValidator"/> </validators>
- 定義全域性規則配置,引入各個實體驗證規則
<?xml version="1.0" encoding="UTF-8"?>
<validation>
<!-- include 標籤匯入其他配置 -->
<include file="validation/user.rule.xml"/>
<include file="validation/article.rule.xml"/>
</validation>
- 定義user和article實體驗證規則
user.rule.xml規則
<?xml version="1.0" encoding="UTF-8"?> <validation> <!-- 驗證組ID,全域性唯一 --> <group name="user.rule"> <!-- 驗證欄位 --> <field name="email"> <rule name="required" message="郵件必須填寫"/> <rule name="size" message="郵件長度應該3-100之間"> <param name="min" value="3"/> <param name="max" value="100"/> </rule> <rule name="pattern" message="郵件格式不正確"> <param name="regex" value="^[A-Za-z]+[\.\-_A-Za-z0-9]*@[A-Za-z0-9]+[\.\-_A-Za-z0-9]*$"/> </rule> </field> <field name="password"> <rule name="required" message="密碼必須填寫" /> <rule name="min" message="密碼至少8個字元"> <param name="value" value="9" /> </rule> <rule name="max" message="密碼最多20個字元"> <param name="value" value="20" /> </rule> <rule name="equals" message="兩次密碼輸入不正確"> <param name="target" value="passwordOne" /> </rule> </field> <field name="starttime"> <rule name="timestampMax" message="開始時間不能大於結束時間"> <param name="target" value="endtime" /> </rule> </field> <field name="endtime"> <rule name="timestampMin" message="結束時間不能小於開始時間"> <param name="target" value="starttime" /> </rule> </field> <field name="age"> <rule name="decimalMin" message="年齡要大於30歲"> <param name="value" value="30" /> </rule> <rule name="decimalMax" message="年齡要小於或等於50歲"> <param name="inclusive" value="true" /> <param name="value" value="50" /> </rule> </field> <field name="address"> <rule name="required" message="地址必須填寫" /> </field> <field name="postcode"> <rule name="equals" message="郵編必須為440000"> <param name="value" value="440000" /> </rule> </field> <field name="stars"> <rule name="decimalMin" message="星星數量要大於5"> <param name="value" value="5" /> </rule> </field> </group> </validation> article.rule.xml規則 ```xml <?xml version="1.0" encoding="UTF-8"?> <validation> <!-- 驗證組ID,全域性唯一 --> <group name="article.rule"> <!-- 驗證欄位 --> <field name="text"> <!-- 規則列表 --> <rule name="required" message="內容必須填寫" /> <rule name="between" message="長度應該100-10000之間"> <param name="min" value="100" /> <param name="max" value="10000" /> </rule> </field> </group> </validation>
- 定義測試實體類
import java.sql.Timestamp; /** * 使用者物件 * */ public class User { // 使用者名稱 private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } // 密碼 private String password; // 確認密碼 private String passwordOne; // 郵箱 private String email; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPostcode() { return postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } public Double getStars() { return stars; } public void setStars(Double stars) { this.stars = stars; } private String address; private String postcode; private Double stars; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } private Integer age; private Timestamp starttime; private Timestamp endtime; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPasswordOne() { return passwordOne; } public void setPasswordOne(String passwordOne) { this.passwordOne = passwordOne; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Timestamp getStarttime() { return starttime; } public void setStarttime(Timestamp starttime) { this.starttime = starttime; } public Timestamp getEndtime() { return endtime; } public void setEndtime(Timestamp endtime) { this.endtime = endtime; } }
- 定義單元測試方法,檢視效果
import com.purestack.common.validation.BasicValidateService;
import com.purestack.common.validation.IValidateService;
import com.purestack.common.validation.ValidationResult;
import com.purestack.common.validation.config.BasicValidateConfig;
import com.purestack.common.validation.config.IValidateConfig;
import org.junit.jupiter.api.Test;
import java.sql.Timestamp;
import java.util.Calendar;
import org.apache.log4j.Logger;
public class ValidationTest {
private static Logger logger = Logger.getLogger(ValidationTest.class);
@Test
public void testValid() {
// 驗證器配置,系統預設配置
String validatorsXML = "validation/validators.xml";
// 規則配置
String rulesXML = "validation/rules.xml";
/**
* 例項化配置物件
*/
IValidateConfig config =new BasicValidateConfig(validatorsXML, rulesXML);
/**
* 例項化驗證服務層
*/
IValidateService validateService = new BasicValidateService(config);
// 例項化使用者
User user = createUser();
/**
* 執行驗證
*/
ValidationResult result = validateService.validate(user, "user.rule");
// 輸出結果
if(result.isValid()) {
logger.info("驗證成功.");
} else {
logger.info("驗證失敗,結果如下");
logger.info(result.getErrors());
}
}
public User createUser(){
User user = new User();
user.setEmail("test#purestack.cc");
user.setPassword("123");
user.setPasswordOne("abc");
user.setAge(70);
user.setPostcode("4422222");
Calendar date = Calendar.getInstance();
user.setStarttime(new Timestamp(date.getTimeInMillis()));
user.setEndtime(new Timestamp(date.getTimeInMillis()-1000));
return user;
}
}
簡單的4個步驟即可完成動態配置驗證規則,簡單方便,你值得擁有!