javax.validation参数校验

在实体字段加注解:

/**
     * 机构名称
     */
    @ApiParam(name = "orgName", value = "机构名称")
    @Size(max = 40,message = "机构名称长度不能超过40!")
    @FieldName(desc = "机构名称")
    private String orgName;

说明:@Size是javax.validation中的注解。还有其他注解可参考javax.validation的所有注解。

注意:

1.字段有值校验;没值不校验。当我们只校验一个实体的一部分字段,只要保证另一部分字段值为空就可以了。

2.@Valid校验;工具类校验。

代码:

1.@Valid校验作用在方法头上

@RequestMapping(value = "/saveInsuredForDomestic",method = RequestMethod.POST)
    @ApiOperation(value = "保存被保险人(国内)", httpMethod = "POST", response = BaseResponse.class,notes = "保存被保险人")
    @ResponseBody
    public BaseResponse saveInsuredForDomestic(HttpServletRequest request,@ApiParam(name = "被保险人") @ModelAttribute("insuredDomesticParam") @Valid InsuredDomesticParam insuredDomesticParam){
...
}

这种方式校验在进入方法之前就对实体中的字段进行了校验。

2.手动校验:

// 参数类型校验
        List<String> validateError = VlidationUtil.validate(prodEverydayTaskPO);
        if(validateError != null && validateError.size() > 0){
            return Pair.of(false,validateError.get(0));
        }

工具类VlidationUtil:

package com.product.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.xml.bind.ValidationException;


/**
  * 校验工具类
  * VlidationUtil
  * @author: liuyachao
  * 2018/6/6 11:11
 */
public class VlidationUtil {
    private static Validator validator;

    static {
       ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
       validator = vf.getValidator();
    }
    /**
      * javax.validation注解校验
      * @throws ValidationException
      * @throws ValidationException
      * @Description: 校验方法
      * @param t 将要校验的对象
      * @throws ValidationException
      * void
      * @throws
     */
    public static <T> List<String> validate(T t){
        Set<ConstraintViolation<T>> set =  validator.validate(t);
        List<String> validateError = new ArrayList<>();
        if(set.size()>0){
            for(ConstraintViolation<T> val : set){
                validateError.add(val.getMessage());
            }
        }
        return validateError;
    }

    /**
     * 是否正整数
     * @param str
     * @return
     */
    public static boolean isPositiveInteger(String str){
        boolean flag=false;
        try{
            String regex="^[1-9]+[0-9]*$";
            Pattern p=Pattern.compile(regex);
            Matcher m=p.matcher(str);
            if(m.find()){
                return true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return flag;
    }


}

此种方式校验可在代码里面任何地方进行校验。相对于@Valid比较灵活。

 

posted @ 2018-06-14 14:08  super超人  阅读(2615)  评论(0编辑  收藏  举报