java 校验框架 - Bean Validation

目录

  • 0. 引言
  • 1. 什么是 Bean Validation
  • 2. 验证注解
  • 3. Bean Validation 的实现
  • 4. 快速实战
  • 5. 总结

0. 引言

我们在写一些业务逻辑,经常需要写一些业务合法性校验,而这些校验是否可能是共用或者通用性的,那有没有想过有什么好的使用方式,今天就介绍下
java 提供的校验框架 - Bean Validation 官网:https://beanvalidation.org/

1. 什么是 Bean Validation

Bean Validation 是一套用于 Java Bean 验证的规范,它定义了一组标准的验证注解,用于验证 Java Bean 的属性值是否符合指定的约束条件。

2. 验证注解

Bean Validation 定义了一组标准的验证注解,用于验证 Java Bean 的属性值是否符合指定的约束条件。这些注解包括:

@NotNull: 验证属性值是否非空
@Null: 验证属性值是否为空
@NotEmpty: 验证属性值是否非空且长度大于 0
@NotBlank: 验证属性值是否非空且去除空格后的长度大于 0
@Size: 验证属性值的长度是否在指定的范围内
@Min: 验证属性值是否大于或等于指定的最小值
@Max: 验证属性值是否小于或等于指定的最大值
@Pattern: 验证属性值是否符合指定的正则表达式
@Email: 验证属性值是否为有效的电子邮件地址
@URL: 验证属性值是否为有效的 URL 地址

3. Bean Validation 的实现

Bean Validation 有多个实现,其中最流行的是 Hibernate Validator。

Hibernate Validator 是一个开源的 Bean Validation 实现,它提供了对所有标准验证注解的支持,并支持自定义验证注解。

4. 快速实战

  • maven 项目中引入如下配置
<!-- 校验框架 -->
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version>
</dependency>
<!-- 框架实现 -->
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.0.17.Final</version>
</dependency>
  • 通过对于类 Order 的校验配置,看看简单的使用过程
    对于属性定义了多种校验规则
public class Order {@NotNull(message="订单号不能为空")@Min(value = 1, message = "订单号必须大于 0")@Max(value = 10000, message = "订单号不能超过 10000")private Long id;@NotEmpty(message = "下单用户不能为空")private String userName;@NotEmpty(message = "地址不能为空")private String address;@NotNull(message = "手机号不能为空")@Pattern(regexp = "^[1]([3-9])[0-9]{9}$")private String mobile;private String status;@NotNull(message = "创建时间不能为空")private Date createTime;// 此处省略 get set
  • 测试
public class TestValidate {/*** 通用校验方法,* 通过 Validation 构建验证器,并调用校验方法*/public static void valid(Object obj) {Validator validator = Validation.buildDefaultValidatorFactory().getValidator();Set<ConstraintViolation<Object>> validates = validator.validate(obj);Iterator<ConstraintViolation<Object>> iterator = validates.iterator();while (iterator.hasNext()) {String message = iterator.next().getMessage();// 输出校验结果,根据实际业务场景进行处理,这里测试 输出结果System.out.println(message);}}public static void main(String[] args) {Order order = new Order();// 调用通用的校验方法valid(order);}
}
  • 输出结果
订单号不能为空
手机号不能为空
下单用户不能为空
地址不能为空
创建时间不能为空

5. 总结

以上就是对 Bean Validation 的简单使用,Bean Validation 可以应用于各种场景,包括:

  • Web 开发:用于验证表单提交的数据
  • 服务端开发:用于验证服务端请求参数
  • 数据持久化:用于验证数据库操作参数

大家可以先测试用起来,有些配置或者使用方式可以一起探索。后面我们再尝试在实际场景中使用它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipv6一致性测试-icmpv6测试步骤

ICMPv6测试步骤 测试配置 防火墙接口1地址 2017:28::6/64 防火墙接口1的MAC地址 00:0C:29:D9:AD:9E 测试主机1地址 2017:28::5/64 测试主机1的网关 2017:28::6 防火墙接口2地址 2017:29::5/64 防火墙接口2的MAC地址 00:0C:29:D9:AD:A8 测试主机2地址 2017:29::5/64 测试主机2的…

交叉编译搭建

1.安装ssh工具 sudo apt-get install openssh-server 2.下载教程编译器 Linaro GCC 编译器下载地址如下&#xff1a; https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/ 最新版本 u-boot启动有问题&#xff0c;下载4.9版本的编译器&a…

Docker前后端项目部署

目录 一、搭建项目部署的局域网 二、redis安装 三、MySQL安装 四、若依后端项目搭建 4.1 使用Dockerfile自定义镜像 五、若依前端项目搭建 一、搭建项目部署的局域网 搭建net-ry局域网&#xff0c;用于部署若依项目 docker network create net-ry --subnet172.68.0.0/1…

VGW在 Windows 平台上局域网就绪的旁路由器程序

在查阅本篇文章之前可以查看下&#xff0c;本人前两年写的关于VGW软件路由器的文章 Linux 平台上面单网卡 TUN/TAP实现局域网其它设备上网_linux 物理网卡与tun同网段-CSDN博客 VGW软件路由器是一个工作IEEE以太网&#xff08;L2&#xff09;链路层的路由器程序&#xff0c;它…

C++进阶之路---继承(一)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承的概念及定义 1.继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0…

Vue教学13:组件的生命周期:掌握组件的每一个关键时刻

大家好&#xff0c;欢迎回到我们的Vue教学系列博客&#xff01;在前十二篇博客中&#xff0c;我们学习了Vue.js的基础知识、安装Node.js与npm、使用Vue Devtools进行调试、Vue实例与生命周期钩子、数据绑定&#xff08;单向与双向&#xff09;、计算属性与侦听器、条件渲染和列…

LeetCode 刷题 [C++] 第98题.验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题目分析 由题…

二级水平导航菜单栏的实现

1. 这个是本人设计的一带一路的二级水平导航栏HTML代码&#xff1b; 这里最后实现的效果是鼠标悬停在导航栏上面&#xff0c;就会显示下面的4个部分页面&#xff0c;这里只是以评论热 点作为例子&#xff0c;其他的类似&#xff1b; 2.首先要设计DIV&#xff0c;然后利用无…

Android 消息恢复 - 如何在 Android 上检索已删除的短信

最新调查显示&#xff0c;手机每天发送和接收的短信数以亿计&#xff0c;尤其是Android智能手机。但与此同时&#xff0c;Android消息丢失也每天都在发生。因此&#xff0c;如何恢复Android手机上已删除的短信对于那些在设备中保存了一些重要信息的人来说似乎非常重要。 在这里…

手机中常用的传感器

文章目录 重力传感器 Gravity sensor三维坐标 加速度传感器 Accelerometer三维坐标 陀螺仪 Gyroscope三维坐标 磁力传感器 Magnetometer三维坐标 光线传感器 Light Sensor接近传感器 Proximity Sensor其他传感器协同工作相机自动调整 传感器有唤醒和非唤醒属性 关于重力传感器和…

前端开发报错:Cannot find module ‘@angular-devkit/schematics‘ Require stack:

1、背景 由于近期需要搭建angular ng-zorro-mobile ionic 框架集成项目&#xff0c;但是在开发过程中遇到了报错&#xff1a; Cannot find module angular-devkit/schematics Require stack 2、原因 这里产生的原因是因为我当时遇到另外一个问题&#xff0c;误导我以为是版…

综合对比各家云服务厂商

云服务厂商的综合对比可以从多个维度进行&#xff0c;包括稳定性、操作便捷性、生态、价格以及安全性等。以下是对几家主流云服务厂商的综合对比&#xff1a; 阿里云&#xff1a;阿里云在稳定性、安全性、性价比、产品功能与生态方面都处于较为领先的地位。其拥有全球领先的云…

数字经济的新篇章:Web3的全球影响

随着区块链技术的飞速发展&#xff0c;Web3作为其重要组成部分&#xff0c;正在成为数字经济的新篇章&#xff0c;并在全球范围内展现出巨大的影响力。本文将深入探讨Web3对全球经济的影响&#xff0c;以及它所带来的新机遇和挑战。 1. Web3的定义与特点 Web3是建立在区块链技…

MyBatis和MyBatis-Plus的差别和优缺点

MyBatis和MyBatis-Plus的主要差别在于功能和特性方面。MyBatis是一个优秀的持久层框架&#xff0c;它支持自定义SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息&#xff0c;将…

【前端】CSS

定义&#xff1a;层叠样式表 Cascading Style Sheets&#xff0c;控制页面的展示效果 1.基本语法规范 选择器 1/n条声明 选择器决定针对谁修改声明决定修改啥声明的属性是键值对&#xff0c;使用 ; 区分键值对&#xff0c;使用 : 区分键和值 2.格式 style标签可放在head标…

android开发学习-内容共享(server+client)

在应用之间共享数据 通过ContentProvider封装数据 ContentProvider使用的Uri语法结构如下&#xff1a; content://authority/data_path/id content&#xff1a;通用前缀&#xff0c;表示该uri用于ContentProvider定位资源 authority&#xff1a;是授权者名称&#xff0c;用…

【Python--读获取目录下所有csv文件中的均值与偏态】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; python练习题 读获取目录下所有csv文件中的均值与偏态按照均值和偏态最大值进行排序完整代码 读获取目录下…

基于OpenCV的图形分析辨认03

目录 一、前言 二、实验目的 三、实验内容 四、实验过程 一、前言 编程语言&#xff1a;Python&#xff0c;编程软件&#xff1a;vscode或pycharm&#xff0c;必备的第三方库&#xff1a;OpenCV&#xff0c;numpy&#xff0c;matplotlib&#xff0c;os等等。 关于OpenCV&…

LeetCode.2917. 找出数组中的 K-or 值

题目 2917. 找出数组中的 K-or 值 分析 这道题其实是要我们求第i位二进制为1的元素个数至少为k&#xff0c;把符合条件的2^i全部加到一起。 因此&#xff0c;我们的思路就是枚举数组的每一位&#xff0c;并且进行以下两个步骤&#xff1a; 统计所有元素第i位1的个数cnt。…

ubuntu 中进入python 编辑如何退出到命令行

文章目录 在Python解释器&#xff08;交互式命令行&#xff09;中&#xff0c;你可以使用 exit()函数或 CtrlD&#xff08;在Unix/Linux/macOS上&#xff09;或 CtrlZ然后输入 Enter&#xff08;在Windows上&#xff09;来退出Python解释器并返回到命令行。 以下是具体的步骤&a…