zoukankan      html  css  js  c++  java
  • 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比较灵活。

  • 相关阅读:
    存储引擎-Buffered tree
    存储引擎-Bitcast
    飞锐GIS开发基础系列
    arcgisserver
    综​合​管​网​方​案​说​明
    Leaflet交流
    .NET开源工程推荐(Accord,AForge,Emgu CV)
    GIS科研站
    C语言I博客作业008
    预习原码补码
  • 原文地址:https://www.cnblogs.com/super-chao/p/9182750.html
Copyright © 2011-2022 走看看