• 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比较灵活。

  • 相关阅读:
    Spring整合JMS(四)——事务管理
    centos7.3部署django用uwsgi和nginx[亲测可用]
    ImportError: Couldn't import Django.或者提示Django 模块不存在
    ModuleNotFoundError: No module named '_sqlite3'
    django-admin:command not found的解决办法
    2个版本并存的python使用新的版本安装django的方法
    uwsgi的使用
    plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
    cento7.3下玩转sphinx
    一些常用的centos命令,记忆下,属于常用的
  • 原文地址:https://www.cnblogs.com/super-chao/p/9182750.html
Copyright © 2020-2023  润新知