自定义数据校验

package com.hz1202.utils;

import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.hz1202.exception.ParamException;
import org.apache.commons.collections.MapUtils;

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

/**
 * @Author: mol
 * @Description:数据校验工具
 * @Date: create in 9:12 2018/2/27
 */
public class BeanValidator {
    //创建校验工厂
    private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
    public static <T> Map<String,String> validate(T t,Class... groups){
        Validator validator = validatorFactory.getValidator();
        //获取校验结果
        Set validateResult = validator.validate(t,groups);
        //判断结果是否为空
        if(validateResult.isEmpty()){
            //返回空集合
            return Collections.emptyMap();
        }else{
            LinkedHashMap errors = Maps.newLinkedHashMap();
            Iterator iterator = validateResult.iterator();
            while(iterator.hasNext()){
                ConstraintViolation violation = (ConstraintViolation)iterator.next();
                errors.put(violation.getPropertyPath().toString(),violation.getMessage());
            }
            return errors;
        }
    }

    public static Map<String,String> validateList(Collection<?> collection){
        Preconditions.checkNotNull(collection);
        Iterator iterator = collection.iterator();
        Map errors;
        do{
            if(!iterator.hasNext()){
                return Collections.emptyMap();
            }
            Object object = iterator.next();
            errors = validate(object,new Class[0]);
        }while (errors.isEmpty());
        return errors;
    }

    public static Map<String,String> 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<String, String> map = validateObject(param);
        if(MapUtils.isNotEmpty(map)){
            throw new ParamException(map.toString());
        }
    }
}

测试参数:

package com.hz1202.param;

import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.NotNull;

/**
 * @Author: mol
 * @Description:
 * @Date: create in 10:26 2018/2/27
 */
@Setter
@Getter
public class TestVO {
    @NotBlank
    private String msg;
    @NotNull
    private Integer id;
}

测试方法:

package com.hz1202.controller;

import com.hz1202.common.JsonData;
import com.hz1202.exception.ParamException;
import com.hz1202.exception.PermissionException;
import com.hz1202.param.TestVO;
import com.hz1202.utils.BeanValidator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;


@Controller
@RequestMapping(value = "/test")
@Slf4j
public class TestController {

    @RequestMapping("/validate.json")
    @ResponseBody
    public JsonData testValidate(TestVO testVO) throws ParamException{
        log.info("【校验测试】校验测试");
       BeanValidator.check(testVO);
        return JsonData.createSuccess("test validate");
    }

}

浏览器访问不带参数时  http://localhost:8080/test/validate.json    输出

112501_jqEz_3042999.png

说明校验成功,继续访问http://localhost:8080/test/validate.json?id=1&msg=“haha”输出

112642_l3Xs_3042999.png

校验生效

 

 

转载于:https://my.oschina.net/u/3042999/blog/1624940

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值