栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基于hibernate-validator参数校验实战

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于hibernate-validator参数校验实战

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;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号