• 【开源】EValidator Java简单校验工具二


     目录

    背景


    开发背景

    来源:在之前公司导入Excel的数据校验是这样的

    1. ......
    2. if (!StrUtil.isBlank(phone) && !StringUtils.isNumber(phone)) {
    3. String errorMsg = "xxx格式错误";
    4. failList.add(errorMsg);
    5. }
    6. if (!StrUtil.isBlank(phoneBack) && !StringUtils.isNumber(phoneBack)) {
    7. String errorMsg = "xxx格式错误";
    8. failList.add(errorMsg);
    9. }
    10. if (!StrUtil.isBlank(email) && existEmailList.contains(email)) {
    11. String errorMsg = "xx已存在";
    12. failList.add(errorMsg);
    13. }
    14. if (StrUtil.isNotBlank(customerTypeDesc)) {
    15. String errorMsg = "xxx必填";
    16. failList.add(errorMsg);
    17. }
    18. ...........

    相信大部分公司,比如导入一个Excel,需要校验列的值,用的都是上面的方式进行校验,本工具的目的是为了解决这一系列的代码,使得校验越来越简洁。

    工具引入

    Maven

    1. <dependency>
    2. <groupId>com.gitee.dqhmgroupId>
    3. <artifactId>evalidatorartifactId>
    4. <version>2.0.1version>
    5. dependency>

    Grade

    implementation 'com.gitee.dqhm:evalidator:2.0.1'

    最新版本查看地址:Maven Central Repository Search

    开源地址

    EValidator: 字段校验

    使用说明

    简单校验

    在需要校验的字段上加上注解 

        @Evalidator(rules = Ev.REQUIRED)

    rules 为工具自带的校验, 多种校验,则用{”“,""}隔开即可,目前自带的校验有

    1. public enum Ev {
    2. DATE_DOWN("验证时间不得早于指定时间(默认为当前时间)", "dateCompareDownVerification"),
    3. DATE_UP("验证时间不得迟于指定时间(默认为当前时间)", "dateCompareUpVerification"),
    4. DATE_FORMAT("验证日期格式是否正确", "dateFormatVerification"),
    5. ANY_REQUIRED("验证多个字段任一必填", "anyRequiredVerification"),
    6. SCOPE("验证值是否在范围中", "scopeVerification"),
    7. REQUIRED("验证必填", "requiredVerification"),
    8. DIGITAL("验证是否为数字", "digitalVerification"),
    9. LENGTH("验证长度是否在允许范围", "lengthVerification"),
    10. USER_NAME("验证用户名(字母开头,允许5-16字节,允许字母数字下划线)", "userNameVerification"),
    11. PASSWORD("验证密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)", "passwordVerification"),
    12. MOBILE("验证手机号", "mobileVerification"),
    13. EMAIL("验证邮箱格式是否正确", "emailVerification"),
    14. CHINESE("验证是否包含汉字", "chineseVerification"),
    15. ID_CARD("验证身份证(15位、18位数字)", "idCardVerification"),
    16. URL("验证URL是否正确", "urlVerification"),
    17. IP_ADDR("验证IP地址是否正确(x.x.x.x)", "ipAddrVerification");
    18. }

    使用方式,在需要校验的实体类字段上,加上注解 @Evalidator

    1. package eample.model;
    2. import com.ev.annotation.Evalidator;
    3. import com.ev.com.ev.consts.DateFomat;
    4. import com.ev.com.ev.consts.Ev;
    5. import com.ev.com.ev.consts.Filter;
    6. import lombok.Data;
    7. /**
    8. * 测试实体类
    9. *
    10. * @author dengqianghua
    11. * @date 2021/8/9 16:40
    12. */
    13. @Data
    14. public class TestModel {
    15. /**
    16. * 时间大小比较
    17. * dateFormat 数据输入的日期格式
    18. * specifiedTime 进行比较的时间 默认为当前时间
    19. */
    20. @Evalidator(rules = Ev.DATE_DOWN,dateFormat = DateFomat.DF_01,specifiedTime = 1628498819000L,name = "测试时间小于指定时间")
    21. private String dateCompareDown;
    22. /**
    23. * 时间大小比较
    24. */
    25. @Evalidator(rules = Ev.DATE_UP,dateFormat = DateFomat.DF_01,specifiedTime = 1628498819000L,name = "测试时间大于指定时间")
    26. private String dateCompareUp;
    27. /**
    28. * 日期格式
    29. * dateFormat 期望的日期格式
    30. */
    31. @Evalidator(rules = Ev.DATE_FORMAT,dateFormat = DateFomat.DF_31,name = "测试日期")
    32. private String dateFormat;
    33. /**
    34. * 任一必填
    35. * anyRequired 为需要进行任一必填的类型,类型一致才会进行任一必填校验
    36. */
    37. @Evalidator(rules = Ev.ANY_REQUIRED,anyRequired = "c")
    38. private String anyRequired;
    39. /**
    40. * 任一必填
    41. */
    42. @Evalidator(rules = Ev.ANY_REQUIRED,anyRequired = "c")
    43. private String anyRequired2;
    44. /**
    45. * 必填
    46. */
    47. @Evalidator(rules = Ev.REQUIRED)
    48. private String required;
    49. /**
    50. * 数字
    51. */
    52. @Evalidator(rules = Ev.DIGITAL,name = "测试数字",errorMsg = "格式出错")
    53. private String digital;
    54. /**
    55. * 长度
    56. */
    57. @Evalidator(rules = Ev.LENGTH,maxLength = 10)
    58. private String length;
    59. /**
    60. * 用户名
    61. */
    62. @Evalidator(rules = Ev.USER_NAME)
    63. private String userName;
    64. /**
    65. * 密码
    66. */
    67. @Evalidator(rules = Ev.PASSWORD)
    68. private String password;
    69. /**
    70. * 手机号
    71. */
    72. @Evalidator(rules = Ev.MOBILE)
    73. private String mobile;
    74. /**
    75. * 邮箱
    76. */
    77. @Evalidator(rules = Ev.EMAIL)
    78. private String email;
    79. /**
    80. * 汉字
    81. */
    82. @Evalidator(rules = Ev.CHINESE)
    83. private String chinese;
    84. /**
    85. * 身份证
    86. */
    87. @Evalidator(rules = Ev.ID_CARD)
    88. private String idCard;
    89. /**
    90. * URL
    91. */
    92. @Evalidator(rules = Ev.URL)
    93. private String url;
    94. /**
    95. * IP地址
    96. */
    97. @Evalidator(rules = Ev.IP_ADDR)
    98. private String ipAddr;
    99. /**
    100. * 不在范围内
    101. * values 允许的范围
    102. */
    103. @Evalidator(rules = Ev.SCOPE,values = {"caw","8965"})
    104. private String scope;
    105. /**
    106. * 字符串格式化处理,如 过滤字符串中特殊字符
    107. * filter 过滤规则,为类路径
    108. */
    109. @Evalidator(filter = Filter.DIGITAL_FILTER)
    110. private String filter;
    111. }

    配置完成后,在代码中添加执行语句,错误信息将会返回一个List类型,校验会全部校验完成后统一返回所有校验不通过提示信息,如:

    1. TestModel testModel = new TestModel();
    2. testModel.setAnyRequired("test1");
    3. testModel.setRequired("99998");
    4. testModel.setDateCompareDown("2021-09-05");
    5. testModel.setDateCompareUp("2020-09-05");
    6. EvalidatorFactory.evalidator(testModel).forEach(System.out::println);

    至此,校验就完成了

    自定义错误提示

    错误提示分为在当前实体返回的错误提示,和所有用到这个校验规则的错误提示

    当前实体的错误提示:只需要在字段上面注解中添加一个属性 errorMsg 如:

        @Evalidator(rules = Ev.USER_NAME,name = "用户名",errorMsg = "校验不通过")
    

    name 为提示前缀,所以校验不通过会提示:用户名校验不通过,当然也可以不用name,直接写errorMsg就好,name主要用于所有校验规则提示的前缀区分

    所有校验规则提示:意思是只要rules里面填了校验规则,并且没有填errorMsg,则默认会输出类ErrorMsg.java 中定义的默认提示,如果想要更改默认的校验规则提示,只需要更改ErrorMsg.java里面的错误定义,如:

    1. package eample.errormsg;
    2. import com.ev.com.ev.consts.ErrorMsg;
    3. /**
    4. * @description: 错误提示重写类
    5. */
    6. public class MyselfError extends ErrorMsg {
    7. {
    8. super.requiredMsg = "必填";
    9. super.anyRequired = "必须填一个";
    10. }
    11. }

    然后在执行的时候,把自己定义的错误异常类,作为入参传入即可,这种提示适合统一校验的提示

    1. ErrorMsg errorMsg = new MyselfError();
    2. TestModel testModel = new TestModel();
    3. EvalidatorFactory.evalidator(testModel, errorMsg).forEach(System.out::println);

    自定义校验规则

    毕竟默认的校验规则有限,所以要是我代码中提供的校验不能满足你需要的,你可以自定义校验规则,具体操作:在你写的校验方法上,添加注解 @EvalidatorMethod

    1. package eample.rules;
    2. import com.ev.annotation.EvalidatorMethod;
    3. import com.ev.com.ev.consts.Param;
    4. import java.util.ArrayList;
    5. import java.util.List;
    6. /**
    7. * @author dengqianghua
    8. * @description: 自定义校验规则类
    9. * @date 2021/5/14 14:42
    10. */
    11. public class MyselfRule {
    12. @EvalidatorMethod(param = Param.ALL)
    13. public List myselfRule(Object value) {
    14. System.out.println(value);
    15. List errorMage = new ArrayList<>();
    16. errorMage.add("测试提示信息");
    17. errorMage.add("wwwwee");
    18. return errorMage;
    19. }
    20. }

    param参数为,入参的形式 

    1. public enum Param {
    2. ALL("ALL", "整个对象"),
    3. VALUE("VALUE", "单个字段值"),
    4. }

     校验方法的出参,可以为一条校验不通过的提示信息,也可以为多条,多条则为List类型即可,配置好后,就可以按如下方式使用,实体类中字段增加如下注解,方法名,可以自己编写一个常量保存;

    1. /**
    2. * 自定义异常校验
    3. * otherRules 为自己定义的类路径,实现校验的方法
    4. */
    5. @Evalidator(otherRules = "myselfRule")
    6. private String selfValidator;

     执行: EvalidatorFactory.loading("eample.rules"); 为自定义方法所在包路径,多个用数组即可

    1. EvalidatorFactory.loading("eample.rules");
    2. TestModel testModel = new TestModel();
    3. EvalidatorFactory.evalidator(testModel).forEach(System.out::println);

    附言

    具体的校验可以查看开源项目中的Eample,里面有各种校验的简单测试方法

    写的不好的地方大家可以评论留言,看到了都会认真对待的!同时大家有新的校验也可以push上来,使得校验更简单,嘿嘿

  • 相关阅读:
    prometheus监控mysql主从
    Mybatis批量插入数据的两种方式
    时序数据库-6-[IoTDB]的数据模式
    巨人网络 一面
    【云原生】服务网格istio的发展历程
    windows 删除非空目录 --chatGPT
    给电脑一键重装系统后找回照片查看器的方法
    宝塔面板部署express以及MySql项目
    前端构建工具 代码优化压缩 模块管理 依赖管理 资源处理转换 自动化任务 流程优化 高级特性 Webpack Parcel Rollup Gulp 静态资源
    SPASS-参数估计与假设检验
  • 原文地址:https://blog.csdn.net/xiaosemei/article/details/126009760