原文:Java中Validator的使用_荼白-CSDN博客_java validator

很多时候都需要校验穿的参数是否符合规则,但是这种校验的代码会重复很多,所以引入 validator 来校验参数,这样可以省去很多冗余的代码

目录

pom文件引入

需要校验的参数

编写 Validator 校验工具

在传入参数时先校验参数

常见的校验注解


pom文件引入

 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.4.Final</version></dependency><!-- 工具类 就是封装平常用的方法 --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId></dependency><!-- 断言神器 --><dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId></dependency>

需要校验的参数

@Getter
@Setter
public class UserParam {private Integer id;@NotBlank(message = "用户名不可以为空")@Length(min = 1, max = 20, message = "用户名长度需要在20个字以内")private String username;@NotBlank(message = "电话不可以为空")@Length(min = 1, max = 13, message = "电话长度需要在13个字以内")private String telephone;@NotBlank(message = "custEmail不可为空")@Length(max = 50, message = "custEmail不超过{max}个字符")@Email(message = "{valid.mail}")private String mail;// 销售日期(格式:yyyy-MM-dd)@Length(max = 20, message = "autoBoughtTime不超过{max}个字符")@Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "autoBoughtTime格式必须为yyyy-MM-dd")private String autoBoughtTime;}

编写 Validator 校验工具

public class BeanValidator {private static ValidatorFactory validatorFactory= Validation.buildDefaultValidatorFactory();//返回mappublic static <T> Map<String,String> validate(T t, Class... groups){Validator validator=validatorFactory.getValidator();Set validateResult=validator.validate(t,groups);//如果为空if (validateResult.isEmpty()){return Collections.emptyMap();}else{//不为空时表示有错误LinkedHashMap errors= Maps.newLinkedHashMap();//遍历Iterator iterator=validateResult.iterator();while (iterator.hasNext()){ConstraintViolation violation=(ConstraintViolation) iterator.next();errors.put(violation.getPropertyPath().toString(),violation.getMessage());}return errors;}}//返回listpublic static Map<String,String> validateList(Collection<?> collection){//基础校验collection是否为空Preconditions.checkNotNull(collection);//遍历collectionIterator iterator=collection.iterator();Map errors;do {//如果循环下一个为空直接返回空if (!iterator.hasNext()){return Collections.emptyMap();}Object object=iterator.next();errors=validate(object,new Class[0]);}while (errors.isEmpty());return errors;}// 校验某一对象是否合法public static Map<String,String> validateObject(Object first,Object... objects){if (objects !=null && objects.length > 0 ){return validateList(Lists.asList(first,objects));} else {return validate(first , new Class[0]);}}//校验参数方法public static void check(Object param) throws ParamException {Map<String,String> map=BeanValidator.validateObject(param);//如果错误集合map不为空则抛出异常if (MapUtils.isNotEmpty(map)){throw  new ParamException(map.toString());}}
}

在传入参数时先校验参数

如果参数不符合规则会直接抛出异常,不会进行后面的操作

public void save(DeptParam param){BeanValidator.check(param);//再执行其他操作
}

常见的校验注解

@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式Hibernate Validator提供的校验注解:
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

Java中Validator的使用相关推荐

  1. 安全证书导入到java中的cacerts证书库

    提示: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buildi ...

  2. 如何把安全证书导入到java中的cacerts证书库(转)

    如何把安全证书导入到java中的cacerts证书库 提示:  javax.net.ssl.SSLHandshakeException: sun.security.validator.Validato ...

  3. 忽略Java中的自签名证书

    我在职业生涯中遇到过几次问题,就是我们有时希望允许自签名证书用于开发或测试目的. Google的快速搜索显示了多年来无数Java开发人员遇到的麻烦. 根据确切的证书问题,您可能会收到类似以下内容之一的 ...

  4. [转载] Java中的元数据

    参考链接: Java中的数据类型 元数据 也可能刚听到元数据你会有点陌生,其实任何一个使用过struts,ejb或者hibernate的开发人员都在不知不觉中使用元数据.所谓的元数据是指用来描述数据的 ...

  5. 如何在Java中针对XSD验证XML

    Java XML Validation API can be used to validate XML against XSD in java program. javax.xml.validatio ...

  6. Java 中验证时间格式的 4 种方法

    大家好,今天咱们来讲一下,Java 中如何检查一个字符串是否是合法的日期格式? 为什么要检查时间格式? 后端接口在接收数据的时候,都需要进行检查.检查全部通过后,才能够执行业务逻辑.对于时间格式,我们 ...

  7. Java中使用注解校验参数

    一.参数校验的注解 Java中参数校验的注解来自三方面,分别是 javax.validation:validation-api,对应包javax.validation.constraints org. ...

  8. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  9. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

最新文章

  1. 查看anaconda所用python安装路径conda info --env
  2. 解释一下SQLSERVER事务日志记录
  3. 22.executor service Flask
  4. LeetCode之字符串(C++)的切割简单实现
  5. 超几何分布_概率小题——分布列专题
  6. 主持人的烦恼【牛客】
  7. 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点
  8. VIM编辑器的常用命令
  9. Excel高级图表实现
  10. 真正解决IDEA中Tomcat中文乱码问题
  11. php操作阿里云短信API接口
  12. wlan和wifi的区别
  13. python爬虫实战:之爬取京东商城实例教程!(含源代码)
  14. 170815 WarGames-Krypton(0-6)
  15. 求助,WIN10系统,我的推特用不了,提示网络没连接,其实我网络是好的,求大神指点,万分感谢!
  16. centos7 Zookeeper集群部署
  17. ACE库中ACE_Msg_Log日志对象浅论
  18. Kubernetes基础:Deployment中ReplicaSet
  19. 对医疗数据泄露零容忍,数据安全治理势在必行
  20. 爱丁堡大学—计算机应用数学,爱丁堡大学计算机应用数学理学硕士专业

热门文章

  1. 产品经理必修课(6):用户体验
  2. Python--从基础到面向对象全过程笔记
  3. 服务器隔板在哪个位置好,客厅空调摆放在哪个位置好?客厅空调正确摆放位置详解...
  4. 码垛机械臂工作站系统设计
  5. tomcat页面显示404
  6. 【解决方案】如何基于EasyDSS直播点播系统快速搭建VR直播平台?
  7. 和这三种人深交:养生、养人、养心
  8. 华工计算机基础知识随堂作业答案,新版华工《计算机应用基础》随堂练习.doc...
  9. 怎么用iTunes备份手机数据 苹果刷机怎么备份手机数据
  10. MDK AC6 不支持在代码中改变优化等级