Java使用Validator类进行实体属性格式验证(一次性返回所有验证结果)

本文介绍了一种用于Java开发的实体类字段校验工具,通过`ValidatorUtil`类实现对自定义实体类属性的格式验证。该工具利用Hibernate Validator进行验证,并一次性返回所有错误信息。示例中展示了如何对`User`实体的姓名、手机号和身份证号进行校验,校验规则包括长度限制和正则表达式匹配。在实际应用中,验证失败的信息可以抛出异常或进行相应处理。

一、场景

  在开发过程中,经常需要对自定义组装的类进行字段校验,因此专门分装了一个对实体类属性格式验证的方法。

二、工具代码

/**
 * 功能:实体属性格式验证
 * <p>
 * ──────────────────────────────────────────
 * version  变更日期       修改人    修改说明
 * ------------------------------------------
 * V1.0.0   2022/8/15     CHY     初版
 * ──────────────────────────────────────────
 *
 * @author CHY
 */
public class ValidatorUtil {

    private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

    /**
     * 实体属性格式验证(一次性返回所有验证结果)
     *
     * @param t   实体集
     * @param <T> 实体
     * @return 返回结果
     */
    public static <T> String validates(T t) {
        Validator validator = factory.getValidator();
        Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);

        List<String> messageList = new ArrayList<>();
        for (ConstraintViolation<T> constraintViolation : constraintViolations) {
            messageList.add(constraintViolation.getMessage());
        }
        String error = "";
        if (messageList != null && messageList.size() > 0) {
            error = StringUtils.join(messageList, ";");
        }
        return error;
    }
}

三、实体类代码

@Data
public class User {

    @Length(max = 10)
    @NotBlank(message = "用户姓名不能为空")
    private String name;

    @ApiModelProperty("手机号")
    @Length(min = 1, max = 12)
    @NotBlank(message = "手机号码不能为空")
    @Pattern(regexp = "^1(3\\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\\d|9[0-35-9])\\d{8}$",message = "手机号码格式不正确")
    private String mobile;

    @ApiModelProperty("身份证号")
    @NotBlank(message = "身份证号不能为空")
    private String idCard;
}

四、如何使用?

public class ValidatorUtilTest {

    public static void main(String[] args) {
        User user = new User();
        user.setName("");
        user.setMobile("4561253");
        user.setIdCard("11111111111111111111111111111111111111");
        String validates = validates(user);
        if (!StringUtil.isEmpty(validates)) {
        	// TODO 在实际开发中,此处可以替换成抛出异常
            System.out.println("错误信息如下:" + validates);
        }
    }
}

五、测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值