目录

背景


开发背景

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


......if (!StrUtil.isBlank(phone) && !StringUtils.isNumber(phone)) {String errorMsg = "xxx格式错误";failList.add(errorMsg);}if (!StrUtil.isBlank(phoneBack) && !StringUtils.isNumber(phoneBack)) {String errorMsg = "xxx格式错误";failList.add(errorMsg);}if (!StrUtil.isBlank(email) && existEmailList.contains(email)) {String errorMsg = "xx已存在";failList.add(errorMsg);}if (StrUtil.isNotBlank(customerTypeDesc)) {String errorMsg = "xxx必填";failList.add(errorMsg);}
...........

看了这段代码,我在想能不能把这部分的代码抽成一个公共的校验类,在下次开发同样的功能时,就可以直接用了。并且代码也不会这么写了,说干就干

工具引入

Maven

<dependency><groupId>com.gitee.dqhm</groupId><artifactId>evalidator</artifactId><version>1.0.4</version>
</dependency>

Grade

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

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

开源地址

EValidator: 字段校验

使用说明

简单校验

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

    @Evalidator(rules = Ev.REQUIRED)

rules 为执行的校验类,可以在Ev.java 类中查看目前已实现的,多个校验规则,则用{”“,""}隔开即可

demo

package eample.model;import com.ev.annotation.Evalidator;
import com.ev.com.ev.consts.DateFomat;
import com.ev.com.ev.consts.Ev;
import com.ev.com.ev.consts.Filter;
import lombok.Data;/*** 测试实体类** @author dengqianghua* @date 2021/8/9 16:40*/
@Data
public class TestModel {/*** 时间大小比较* dateFormat 数据输入的日期格式* specifiedTime 进行比较的时间 默认为当前时间*/@Evalidator(rules = Ev.DATE_DOWN,dateFormat = DateFomat.DF_01,specifiedTime = 1628498819000L,name = "测试时间小于指定时间")private String dateCompareDown;/*** 时间大小比较*/@Evalidator(rules = Ev.DATE_UP,dateFormat = DateFomat.DF_01,specifiedTime = 1628498819000L,name = "测试时间大于指定时间")private String dateCompareUp;/*** 日期格式* dateFormat  期望的日期格式*/@Evalidator(rules = Ev.DATE_FORMAT,dateFormat = DateFomat.DF_31,name = "测试日期")private String dateFormat;/*** 任一必填* anyRequired 为需要进行任一必填的类型,类型一致才会进行任一必填校验*/@Evalidator(rules = Ev.ANY_REQUIRED,anyRequired = "c")private String anyRequired;/*** 任一必填*/@Evalidator(rules = Ev.ANY_REQUIRED,anyRequired = "c")private String anyRequired2;/*** 必填*/@Evalidator(rules = Ev.REQUIRED)private String required;/*** 数字*/@Evalidator(rules = Ev.DIGITAL,name = "测试数字",errorMsg = "格式出错")private String digital;/*** 长度*/@Evalidator(rules = Ev.LENGTH,maxLength = 10)private String length;/*** 用户名*/@Evalidator(rules = Ev.USER_NAME)private String userName;/*** 密码*/@Evalidator(rules = Ev.PASSWORD)private String password;/*** 手机号*/@Evalidator(rules = Ev.MOBILE)private String mobile;/*** 邮箱*/@Evalidator(rules = Ev.EMAIL)private String email;/*** 汉字*/@Evalidator(rules = Ev.CHINESE)private String chinese;/*** 身份证*/@Evalidator(rules = Ev.ID_CARD)private String idCard;/*** URL*/@Evalidator(rules = Ev.URL)private String url;/*** IP地址*/@Evalidator(rules = Ev.IP_ADDR)private String ipAddr;/*** 不在范围内* values 允许的范围*/@Evalidator(rules = Ev.SCOPE,values = {"caw","8965"})private String scope;/*** 自定义异常校验* otherRules 为自己定义的类路径,实现校验的方法*/@Evalidator(otherRules = "eample.rules.MyselfRule",errorMsg = "自定义异常校验")private String selfValidator;/*** 字符串格式化处理,如 过滤字符串中特殊字符* filter 过滤规则,为类路径*/@Evalidator(filter = Filter.DIGITAL_FILTER)private String filter;
}

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

        TestModel testModel = new TestModel();testModel.setAnyRequired("test1");testModel.setRequired("99998");testModel.setDateCompareDown("2021-09-05");testModel.setDateCompareUp("2020-09-05");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里面的错误定义,如:

package eample.errormsg;import com.ev.com.ev.consts.ErrorMsg;/*** @description: 错误提示重写类*/
public class MyselfError extends ErrorMsg {{super.requiredMsg = "必填";super.anyRequired = "必须填一个";}}

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

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

自定义校验规则

毕竟一个人应对的校验规则有限,所以要是我代码中提供的校验不能满足你需要的,你可以自定义校验规则,具体操作:

编写校验类继承我的校验类,如:

package eample.rules;import com.ev.rules.verification.Verification;
import eample.errormsg.MyselfError;/*** @description: 自定义校验规则类*/
public class MyselfRule extends Verification {//入参为注解了字段的值@Overridepublic String execute(Object value) {return "自定义校验异常";}
}

返回校验失败提示即可,同时在字段注解上校验规则那里,规则填 otherRules,value为你创建类的类路径

    @Evalidator(otherRules = "eample.rules.MyselfRule")

自定义过滤规则

当我们想对输入的数据进行一定的处理,如,过滤空格,特殊字符,只保留数字等等,我们可以配置如下

package com.ev.filter.rule;import com.ev.filter.FilterRule;
import com.ev.util.NumberUtil;
import com.ev.util.StringUtils;/*** 过滤非数字字符*/
public class DigitalFilter implements FilterRule {@Overridepublic Object filter(Object value) {if (StringUtils.isEmpty(value)) {return value;}if (value instanceof String) {if (NumberUtil.isNumber(value.toString())) {return value;}return value.toString().replaceAll("[^0-9]", "");}return value;}
}

然后,在实体类中配置

@Evalidator(filter = Filter.DIGITAL_FILTER)

public static final String DIGITAL_FILTER = "com.ev.filter.rule.DigitalFilter";

值为类的路径,这样,后面只要配置了,就会进行数据过滤,清洗

附言

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

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

【开源】EValidator Java校验工具包相关推荐

  1. java apache commons_Apache commons(Java常用工具包)简介

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...

  2. 【Java基础1】Java开发工具包JDK

    文章目录 JavaSE.JDK和JRE有什么区别? Java包的主要内容有哪些? JDK和OpenJDK有什么区别? JavaSE.JDK和JRE有什么区别?   Java Development K ...

  3. 陌陌安全开源了 Java 静态代码安全审计插件

    近日,陌陌安全开源了 Java 静态代码安全审计插件 MOMO Code Sec Inspector,侧重于在编码过程中发现项目潜在的安全风险,并提供一键修复能力. MOMO 安全团队认为,绝大部分 ...

  4. 微软开源可解释机器学习工具包lnterpretML

    https://mp.weixin.qq.com/s?__biz=MzI5NTIxNTg0OA==&mid=2247495335&idx=3&sn=26200d9a952fd8 ...

  5. ali arthas 火焰图_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>[1]系列,今天给大家带来一款阿里开源的 Java 诊断利器 ...

  6. java为什么打不开jar_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>[1]系列,今天给大家带来一款阿里开源的 Java 诊断利器 ...

  7. java判断邮箱名和文件名_Java公开课|想学好Java,教你操作Java校验文件名和邮箱地址,快来看看...

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  8. 2017可以兼容那些jdk_2019从头跃——核心基础:何为JDK?Java开发工具包须知总览...

    摘要:JDK是构建Java应用程序的关键平台组件. 其核心是Java编译器. 1.导引 Java Development Kit(JDK)是Java编程中使用的三个核心技术包之一,相伴随的另两个是JV ...

  9. java开发可重用代码包工具包_[Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置...

    [Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置 0 2021-01-04 04:00:04 安装并配置JDK环境变量,不但要知道怎样做,也要知道为什么这样做,知其然知其所以然. ...

最新文章

  1. 每日一皮:不允许穿格子衫之后...
  2. 题目1169:比较奇偶数个数
  3. 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常
  4. java 文件上传 配置_SpringMVCMultipartFilefile文件上传及参数接收
  5. android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...
  6. 作为相亲大户,程序猿为何普遍单身?
  7. jQuery 图像裁剪插件Jcrop
  8. Ubuntu下安装Hadoop
  9. JD_Source Code for problem 1379
  10. 无线通信基础(一):无线网络演进
  11. AGC020C Median Sum
  12. 暗黑主题(皮肤)资源 (实用)
  13. 如何让IE9或IE8打开多个网页时只保留一个IEXPLORE.EXE进程
  14. Python_Dataframe_去除重复数据
  15. 计算机视觉(五)--图像全景拼接原理及实现
  16. absl教程(五):Synchronization library
  17. 计算机国培培训总结,国培培训总结范文(精选5篇)
  18. 【收藏】2018年不容错过的20大人工智能/机器学习/计算机视觉等顶会时间表
  19. [Linux]关于在国产操作系统上安装Oracle数据库
  20. ARP代理(善意的欺骗)

热门文章

  1. 对不起,我不再爱你了
  2. 如何在ubuntu server中通过ArchiSteamFarm挂卡
  3. MongoDB之稀疏索引
  4. chosen.jquery.js 插件的使用和总结
  5. 中国大城市政治地位综合实力排名
  6. 忍者必须死3 玩什么忍者_为什么你害怕忍者
  7. 功能测试之游戏动态测试
  8. 陈志武:美国通识教育的精髓在于思辨与表达
  9. 调试器工作原理系列一: 基础篇
  10. Android 使用webview 打开浏览ppt文件