spring简单封装hibernate-validator进行参数检验

  • 在实际的开发中,当进行向数据库中插入或更新数据的操作的时候,常常会需要对数据是否合法进行必要的判断,例如判断一个电话号码格式是否合法,身份证号码是否合法,邮箱地址是否合法等等.
  • 如果这些操作都需要用java代码一个一个进行判断的话,不仅代码重复率特别高,而且也容易出错.因此,如果有一个简单可复用的方式来进行这些操作,那么会使程序变得更加完美.
  • java中自带了一套参数检验的api,但是随着java周边环境的不断更新迭代,出现了许多相比较java更加严谨的产品.
  • hibernate-validator- 就是一个基于java底层实现的一套参数校验工具,使用起来也非常简单.以下是我在学习中对hibernate-validator工具的简单应用,分享出来供大家学习参考,也希望大家指出我的不足之处.

hibernate-validator简单封装应用

  • 如果是maven工程,添加以下的依赖即可导入hibernate-validator的jar包
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>5.2.4.Final</version>
</dependency>
  • 定义一个校验结果类,用于保存每次参数校验结果,与对应的错的参数名与错误提示信息
// 包名

import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

public class ValidationResult {
    // 判断是否有错误信息
    private boolean hasErrors = false;

    private Map<String,String> errorMsgMap = new HashMap<>();

    public boolean isHasErrors() {
        return hasErrors;
    }

    public void setHasErrors(boolean hasErrors) {
        this.hasErrors = hasErrors;
    }

    public Map<String, String> getErrorMsgMap() {
        return errorMsgMap;
    }

    public void setErrorMsgMap(Map<String, String> errorMsgMap) {
        this.errorMsgMap = errorMsgMap;
    }

    // 实现通用的格式化字符串信息获取错误结果的msg方法
    public String getErrMsg(){
        return StringUtils.join(errorMsgMap.values().toArray(),",");
    }
}


  • 定义一个工具类,实现校验方法并返回校验结果,该类通过继承 InitializingBean接口覆写 afterPropertiesSet()方法来进行参数校验器初始化.
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

// 使用@Component 注解使其成为Spring的组件
@Component
public class ValidatorImpl implements InitializingBean {
    private Validator validator;

    // 实现校验方法并返回校验结果
    public ValidationResult validate(Object object){
        final ValidationResult result = new ValidationResult();
        Set<ConstraintViolation<Object>> validate = validator.validate(object);
        // 有错误
        if (validate.size() > 0){
            result.setHasErrors(true);
            validate.forEach(item->{
                // 错误信息
                String errMsg = item.getMessage();
                // 错误字段名称
                String fieldName = item.getPropertyPath().toString();
                result.getErrorMsgMap().put(fieldName,errMsg);
            });
        }
        return result;
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        // 将hibernate validator通过工厂的初始化方式使其实例化
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
}

  • 就此功能代码实现完成,然后在需要使用参数校验的java类中使用 校验的注解来定义校验规则与错误提示信息

public class UserModel {
    private Integer id;
    @NotBlank(message = "用户名不能为空")
    private String name;
    @NotNull(message = "性别不能不填写")
    private Byte gender;
    @NotNull(message = "年龄不能不填写")
    @Min(value = 0,message = "年龄不能为负数")
    private Integer age;
    @NotBlank(message = "手机号不能为空")
    private String telphone;
    private String registerMode;
    private String thirdPartyId;
    @NotBlank(message = "密码不能为空")
    private String encrptPassword;
    }

在这里插入图片描述

  • 然后在需要进行校验的代码逻辑中通过spring @Autowrite 自动注入校验工具类

在这里插入图片描述

  • 调用校验方法返回校验结果,通过校验结果中的isHasErrors()方法判断是否有错误,如果有错误,通过校验结果的getErrMsg()方法获取错误提示信息
  • 之后可以自己决定是要终止程序还是进行其他操作这就随意了

在这里插入图片描述

发布了199 篇原创文章 · 获赞 37 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览