1 定义工具类
package com.yufan.all.valid.beautifulResult;
import com.yufan.all.valid.dto.TestParent2Dto;
import org.apache.commons.collections.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class ValidationUtil {
private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public static <T> ValidationResult validateEntity(T object,Class<?>... groups){
Set<ConstraintViolation<T>> set = validator.validate(object,groups);
ValidationResult validationResult = new ValidationResult();
if(CollectionUtils.isNotEmpty(set)){
validationResult.setHasErrors(true);
Map<String, String> errorMsg = new HashMap<>();
for (ConstraintViolation<T> cv:set){
System.out.println("123");
errorMsg.put(cv.getPropertyPath().toString(),cv.getMessage());
}
validationResult.setErrorMsg(errorMsg);
}
return validationResult;
}
public static <T> ValidationResult validateProperty(T object,String propertyName){
ValidationResult validationResult = new ValidationResult();
Set<ConstraintViolation<T>> set = validator.validateProperty(object,propertyName, Default.class);
if(CollectionUtils.isNotEmpty(set)){
validationResult.setHasErrors(true);
Map<String, String> errorMsg = new HashMap<>();
for (ConstraintViolation<T> cv:set){
System.out.println("456");
errorMsg.put(cv.getPropertyPath().toString(),cv.getMessage());
}
validationResult.setErrorMsg(errorMsg);
}
return validationResult;
}
public static <T> ValidationResult validatePropertys(T object,String[] propertyNames){
ValidationResult validationResult = new ValidationResult();
String allMsg="";
for (String s :propertyNames){
ValidationResult result = validateProperty(object, s);
if(result.isHasErrors()){
validationResult.setHasErrors(true);
}
Map<String, String> errorMsg = result.getErrorMsg();
String msg = errorMsg.get(s);
allMsg+=s+":"+msg+"; ";
}
validationResult.setAllMsg(allMsg);
return validationResult;
}
public static void main(String[] args) throws Exception {
TestParent2Dto testParent2Dto = new TestParent2Dto();
//验证单个属性
//ValidationResult validationResult = ValidationUtil.validateProperty(testParent2Dto, "enterpriseName");
Class c = Class.forName(testParent2Dto.getClass().getName());
Field[] fields = c.getDeclaredFields();
Field.setAccessible(fields, true);
String[] names= new String[fields.length];
for(int i=0;i<fields.length;i++){
System.out.println(fields[i].getName());
names[i]=fields[i].getName();
}
//批量验证属性
ValidationResult validationResult = ValidationUtil.validatePropertys(testParent2Dto, names);
//ValidationResult validationResult = ValidationUtil.validateEntity(TestParent2Dto.class);
System.out.println(validationResult.toString());
}
}
2 定义公共返回
package com.yufan.all.valid.beautifulResult;
import java.util.Map;
public class ValidationResult {
/**
* 校验结果是否有错
*/
private boolean hasErrors;
/**
* 校验错误信息
*/
private Map<String,String> errorMsg;
private String allMsg;
public boolean isHasErrors() {
return hasErrors;
}
public void setHasErrors(boolean hasErrors) {
this.hasErrors = hasErrors;
}
public Map<String, String> getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(Map<String, String> errorMsg) {
this.errorMsg = errorMsg;
}
public String getAllMsg() {
return allMsg;
}
public void setAllMsg(String allMsg) {
this.allMsg = allMsg;
}
@Override
public String toString() {
return "ValidationResult{" +
"hasErrors=" + hasErrors +
", errorMsg=" + errorMsg +
", allMsg='" + allMsg + '\'' +
'}';
}
}
本文介绍了如何在不依赖Spring的情况下,实现Java程序的校验机制。通过定义工具类和公共返回结构,实现了对输入参数的有效性验证,确保程序的稳定运行。
5764

被折叠的 条评论
为什么被折叠?



