参数校验之validator工具类封装

为什么要使用Bean Validation?

当我们实现某个接口时,都需要对入参数进行校验.

什么是bean validator?

bean validator是一个配置注解来验证参数的框架,它包含两部分Bean Validator api和Hibernate Validator.

  • Bean Validation API是Java定义的一个验证参数的规范。
  • Hibernate Validator是Bean Validation API的一个实现。

pom中引入validator相关依赖

    
      javax.validation
      validation-api
      2.0.1.Final
    
    
      org.hibernate
      hibernate-validator
      5.3.6.Final
    

工具类开发

package com.permission.util;

import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.*;

/**
 * @version:1.0.0
 * @author: lironghong
 * @date: 2019/4/16 23:17
 * @description: validator工具类
 */

public class BeanValidator {
    //校验工厂
    private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();

    /*
     * java使用省略号代替多参数(参数类型... 参数名称)
     * */
    private static  Map validate(T t, Class... groups) {
        Validator validator = validatorFactory.getValidator();
        Set> validate = validator.validate(t, groups);
        if (validate.isEmpty()) {
            return Collections.emptyMap();
        } else {
            /*
            * 
              com.google.guava
              guava
              18.0
              
            * */
            LinkedHashMap errors = Maps.newLinkedHashMap();
            Iterator> iterator = validate.iterator();
            while (iterator.hasNext()) {
                ConstraintViolation violation = (ConstraintViolation) iterator.next();
                errors.put(violation.getPropertyPath().toString(), violation.getMessage());
            }
            return errors;
        }
    }

    public static Map validatelist(Collection collection) {
        //google工具类
        Preconditions.checkNotNull(collection);
        Iterator iterator = collection.iterator();
        Map errors;
        do{
            if (!iterator.hasNext()){
                return Collections.emptyMap();
            }
            Object next = iterator.next();
            errors=validate(next,new Class[0]);
        }while (errors.isEmpty());
        return errors;
    }

    public static Map validateobject(Object first,Object... objects){
        if (objects !=null && objects.length > 0){
            return validatelist(Lists.asList(first,objects));
        }else {
            return validate(first,new Class[0]);
        }
    }

    public static void check(Object param) throws ParamException {
        Map map = BeanValidator.validateobject(param);
        /*
        * 
    
      commons-collections
      commons-collections
      3.2.2
    
    
      commons-codec
      commons-codec
      1.10
    
        * */
        if (MapUtils.isNotEmpty(map)) {
            throw new ParamException(map.toString());
        }
    }
}

vo层

package com.permission.vo;

import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
* @version:1.0.0
* @author: lironghong
* @date: 2019/4/18 16:36
* @description:
*/
@Data
public class TestVo {
    @NotBlank
    private String msg;
    @NotNull
    private Integer id;
    @NotEmpty
    private List str;
}

控制层测试

    @RequestMapping("/validator.json")
    @ResponseBody
    public JsonData validator(TestVo vo){
        log.info("validator");
        try {
            Map validateobject = BeanValidator.validateobject(vo);
            if (validateobject != null && validateobject.entrySet().size() > 0){
                for (Map.Entry entry:validateobject.entrySet()){
                    log.info("{}->{}",entry.getKey(),entry.getValue());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return JsonData.success("test validator");
    }

运行结果

image.png

image.png

你可能感兴趣的:(参数校验之validator工具类封装)