Maven 依赖
7.0.1.Final 4.0.0 org.hibernate.validator hibernate-validator ${validator.version} org.glassfish jakarta.el ${jakarta.version}
参数校验实战
import jakarta.validation.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.executable.Executablevalidator;
import jakarta.validation.metadata.BeanDescriptor;
import jakarta.validation.metadata.ConstraintDescriptor;
import jakarta.validation.metadata.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import java.util.StringJoiner;
public class ValidUtil {
private final static ValidatorFactory factory;
private final static Validator validator;
private final static Executablevalidator executablevalidator;
private final static MessageInterpolator messageInterpolator;
static {
factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
executablevalidator = factory.getValidator().forExecutables();
messageInterpolator = factory.getMessageInterpolator();
}
public static BeanDescriptor classConstraint(Class> clazz) {
return validator.getConstraintsForClass(clazz);
}
public static String fieldConstraint(BeanDescriptor descriptor, String fieldName) {
final PropertyDescriptor property = descriptor.getConstraintsForProperty(fieldName);
if (property == null) {
return null;
}
final Set> descriptors = property.getConstraintDescriptors();
// 排除重复
Set set = new HashSet<>();
descriptors.forEach(desc -> set.add(messageInterpolator.interpolate(desc.getMessageTemplate(),
null, Locale.CHINESE)));
if (set.isEmpty()) {
return null;
}
StringJoiner joiner = new StringJoiner(",");
set.forEach(joiner::add);
return joiner.toString();
}
public static String validateParameters(final Object service, final Method method, final Object[] parameterValues) {
final Set> constraintViolations = executablevalidator.validateParameters(service, method, parameterValues);
StringJoiner joiner = new StringJoiner(",", "{", "}");
constraintViolations.forEach(v -> joiner.add(""" + v.getInvalidValue() + "":"" + v.getMessage() + """));
if (joiner.length() > 2) {
return joiner.toString();
}
return null;
}
public static String validateField(final Object value) {
final Set> validate = validator.validate(value);
StringJoiner joiner = new StringJoiner(",", "{", "}");
validate.forEach(v -> joiner.add(""" + v.getPropertyPath().toString() + "":"" + v.getMessage() + """));
if (joiner.length() > 2) {
return joiner.toString();
}
return null;
}
public static boolean required(Field field) {
return field.getAnnotation(NotNull.class) != null
|| field.getAnnotation(NotEmpty.class) != null
|| field.getAnnotation(NotBlank.class) != null;
}
}



