热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

HibernateValidator实现更简洁的参数校验及一个util

这篇文章主要介绍了HibernateValidator实现更简洁的参数校验及一个util,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

代码地址
https://github.com/wheel-organization/wheel

简介

hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validation 的参考实现,hibernate-validator除了提供了JSR 303规范中所有内置constraint 的实现,还有一些附加的constraint。

使用hibernate-validator能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便、简单。

官网地址:http://hibernate.org/validator/

如何使用

项目中已经引入了需要的api,无需重复引入


  javax.validation
  validation-api
  2.0.1.Final


  org.hibernate
  hibernate-validator
  6.0.16.Final

在要校验的POJO上加上以下注解即可

注解 用途
Valid 递归的对关联的对象进行校验
AssertFalse 用于boolean字段,该字段的值只能为false
AssertTrue 用于boolean字段,该字段只能为true
DecimalMax(value) 被注释的元素必须是一个数字,只能大于或等于该值
DecimalMin(value) 被注释的元素必须是一个数字,只能小于或等于该值
Digits(integer,fraction) 检查是否是一种数字的(整数,小数)的位数
Future 检查该字段的日期是否是属于将来的日期
FutureOrPresent 判断日期是否是将来或现在日期
Past 检查该字段的日期是在过去
PastOrPresent 判断日期是否是过去或现在日期
Max(value) 该字段的值只能小于或等于该值
Min(value) 该字段的值只能大于或等于该值
Negative 判断负数
NegativeOrZero 判断负数或0
Positive 判断正数
PositiveOrZero 判断正数或0
NotNull 不能为null
Null 必须为 null
Pattern(value) 被注释的元素必须符合指定的正则表达式
Size(max, min) 检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
Length(max, min) 判断字符串长度
CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
Email 被注释的元素必须是电子邮箱地址
Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0
NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
Range(min=, max=) 被注释的元素必须在合适的范围内
SafeHtml classpath中要有jsoup包
ScriptAssert 要有Java Scripting API 即JSR 223("Scripting for the JavaTMPlatform")的实现
URL(protocol=,host=,port=,regexp=,flags=) 被注释的字符串必须是一个有效的url

更多功能,如:自定义校验规则、分组校验、关联参数联合校验请查看官网或百度

Dubbo中使用Hibernate Validator校验入参

无需util,Dubbo接口配置上的validation为true即可

在客户端验证参数

在服务器端验证参数


在代码里校验入参

//obj为包含Hibernate Validator注解的POJO
//快速失败模式
ValidResult validResult = ValidationUtil.fastFailValidate(obj);
//obj为包含Hibernate Validator注解的POJO
//全部校验模式
ValidResult validResult = ValidationUtil.allCheckValidate(obj);

样例

public class ParamTestDTO implements Serializable {

  private static final long serialVersiOnUID= 7123882542534668217L;

  @AssertTrue(message = "Error True")
  private Boolean testTrue;

  @AssertFalse(message = "Error False")
  private Boolean testFalse;

  @DecimalMax(value = "10", message = "Error StrMax")
  private String testStrMax;

  @DecimalMin(value = "1", message = "Error StrMin")
  private String testStrMin;

  @Max(value = 10, message = "Error Max")
  private Integer testMax;

  @Min(value = 1, message = "Error Min")
  private Double testMin;

  @Digits(integer = 2, fraction = 3, message = "Error Dig")
  private BigDecimal testDig;

  @Past(message = "Error Past")
  private Date testPast;

  @Future(message = "Error Future")
  private Date testFuture;

  @Null(message = "Error Null")
  private String testNull;

  @NotNull(message = "Error NonNull")
  private String testNonNull;

  @Pattern(regexp = "^[0-9]?[0-9]$", message = "Error Pattern")
  private String testPattern;

  @Size(min = 1, max = 10, message = "Error Size")
  private List testSize;

  @Length(min = 1, max = 10, message = "Error Length")
  private String testLength;

  @NotBlank(message = "Error Blank")
  private String testBlank;

  @NotEmpty(message = "Error NotEmpty")
  private String testEmpty;

  @Range(min = 1, max = 10, message = "Error Range")
  private String testRange;
}

单测:ValidationUtilTest

性能测试

结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了 BERT 模型中 Transformer 的 Attention 机制,包括其原理、实现代码以及在自然语言处理中的应用。通过结合多个权威资源,帮助读者全面理解这一关键技术。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍如何使用 Sortable.js 库实现元素的拖拽和位置交换功能。Sortable.js 是一个轻量级、无依赖的 JavaScript 库,支持拖拽排序、动画效果和多种插件扩展。通过简单的配置和事件处理,可以轻松实现复杂的功能。 ... [详细]
author-avatar
丨丶皓月_261
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有