Hibernate-validate工具类
  J0tQqlYbt0QD 2023年11月02日 51 0

简介

使用hibernate-validate来验证,其中分为手动和自动校验,自动校验可以联合spring,使用@Valid注解,以及 BindingResult类来自动收集消息。 本博客实现的功能是创建一个数据校验的工具类:校验指定类或注定属性是否符合规则,将错误封装。以后可以通过手动调用校验返回结果

具体实现

依赖

<dependency>
    <groupId>org.hibernate</groupId>
   <artifactId>hibernate-validator</artifactId>
    <version>8.0.0.Final</version>
</dependency>

封装异常信息的实体类

@Getter
@Setter
@ToString
public class ValidateResult {
    /**
     * 是否有异常
     */
    private boolean hasErrors;

    /**
     * 异常消息记录
     */
    private Map<String, String> errorMsg;
}

第三步:数据校验工具类

public class ValidateUtil {
    private ValidateUtil() {
    }

    /**
     * 验证器
     */
    private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

    /**
     * 校验实体,返回实体所有属性的校验结果
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> ValidateResult validateEntity(T obj) {
        Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);
        return buildValidationResult(set);
    }


    /**
     * 校验指定实体的指定属性是否存在异常
     *
     * @param obj
     * @param propertyName
     * @param <T>
     * @return
     */
    public static <T> ValidateResult validateProperty(T obj, String propertyName) {
        Set<ConstraintViolation<T>> set = validator.validateProperty(obj, propertyName, Default.class);
        return buildValidationResult(set);
    }

    /**
     * 将异常结果封装返回
     *
     * @param set
     * @param <T>
     * @return
     */
    private static <T> ValidateResult buildValidationResult(Set<ConstraintViolation<T>> set) {
        ValidateResult result = new ValidateResult();
        if (!CollectionUtils.isEmpty(set)) {
            result.setHasErrors(true);
            Map<String, String> errorMsg = new HashMap<>();
            for (ConstraintViolation<T> cv : set) {
                errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());
            }
            result.setErrorMsg(errorMsg);
        }
        return result;
    }
}

测试代码

public class ValidateUtilsTest {

    @Test
    public void validateEntity() {
        UserLoginDTO user = new UserLoginDTO();
        ValidateResult result = ValidateUtil.validateEntity(user);
        System.out.println(result);
    }

    @Test
    public void validateEntity2() {
        UserLoginDTO user = new UserLoginDTO();
        user.setAccount("asdfweeqreq");
        ValidateResult result = ValidateUtil.validateEntity(user);
        System.out.println(result);
    }   
    @Test
    public void validateEntity3() {
        UserLoginDTO user = new UserLoginDTO();
        user.setAccount("asdfweeqreq");
        user.setPassword("23154323424");
        ValidateResult result = ValidateUtil.validateEntity(user);
        System.out.println(result);
    }

    @Test
    public void validateProperty() {
        UserLoginDTO user = new UserLoginDTO();
        ValidateResult result = ValidateUtil.validateProperty(user,"account");
        System.out.println(result);
    }
}  
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   38   0   0 Java
  8s1LUHPryisj   2024年05月17日   35   0   0 Java
  aRSRdgycpgWt   2024年05月17日   38   0   0 Java
J0tQqlYbt0QD