Java对象校验工具类,可以根据字段友善的报错提示,也可以对列表数据进行校验
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.List;
import java.util.Set;
/**
* @Description: 对象验证工具
* @Author: Alun
* @Date: 2023/3/29
* @Version: V1.0
*/
public class ValidatorUtil {
private static Validator validator = null;
static {
if (validator == null) {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
}
}
private static <T> String validated(T obj) {
if (null == obj) {
return "校验对象不能为空!";
}
StringBuilder sb = new StringBuilder();
Set<ConstraintViolation<T>> validateSet = validator.validate(obj);
if (validateSet != null && validateSet.size() > 0) {
for (ConstraintViolation<T> cv : validateSet) {
sb.append(cv.getPropertyPath().toString()).append(":").append(cv.getMessage()).append("; ");
}
}
return sb.toString();
}
/**
* 对单个对象进行参数校验
* @param obj
* @param <T>
*/
public static <T> void validate(T obj) {
String check = validated(obj);
if (check != null && !"".equals(check.trim())) {
throw new IllegalArgumentException(String.format("%s", check));
}
}
/**
* 对列表进行参数校验
* @param list
* @param <T>
*/
public static <T> void validateList(List<T> list) {
validateList(null, list);
}
/**
* <pre>
* 解决Excel导入标题行不需要校验的问题
* </pre>
*
* @param startRowNum 开始行号(以0开始)
* @param list
* @param <T>
*/
public static <T> void validateList(Integer startRowNum, List<T> list) {
if (list == null || list.isEmpty()) {
throw new IllegalArgumentException("校验列表不能为空!");
}
startRowNum = startRowNum == null ? 0 : startRowNum;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
String check = validated(list.get(i));
if (check != null && !"".equals(check.trim())) {
sb.append("第" + (i + 1 + startRowNum) + "行: ").append(check);
}
}
if (!"".equals(sb.toString().trim())) {
throw new IllegalArgumentException(String.format("%s", sb.toString()));
}
}
}