后端校验(hibernate-validator)

news/2024/11/1 17:27:06/

目录

  • 一、介绍和依赖
    • 二、方法的 Model 参数校验
  • 三、方法的非 Model 参数校验
  • 四、常用注解
  • 五、快速失败
  • 六、自定义校验规则

一、介绍和依赖

  • hibernate-validator 是 Java 中常用的后端校验框架

  • https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/【参考文档】

🌻 在 SpringBoot 项目中配置如下依赖:🌻

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

在这里插入图片描述

二、方法的 Model 参数校验

🌻 使用步骤
① 在 Model 的 get 方法或成员变量添加相关的校验注解
② 给方法的 Model 参数添加 @Valid 注解

🌻 若校验失败会抛异常
org.springframework.validation.BindException
② 通过 BindException.getBindingResult().getAllErrors() 可拿到全部的错误信息

在这里插入图片描述
在这里插入图片描述

三、方法的非 Model 参数校验

🌻 使用步骤
① 给 Controller 添加 @Validated 注解
② 给非 Model 参数添加相关的校验注解

🌻 校验失败会抛异常
javax.validation.ConstraintViolationException
② 通过 ConstraintViolationException.getConstraintViolations 可拿到全部的错误信息

在这里插入图片描述
在这里插入图片描述

四、常用注解

@NotNull: 不能为 null,可以为空串
@NotEmpty: 不能为 null,且长度必须大于 0
@NotBlank: 只能作用在 String 上,不能为 null,且去除空格后长度必须大于 0
@AssertFalse:必须为 false
@AssertTrue:必须为 true
@Max、@DecimalMax:必须为一个不大于指定值的数字
@Min、@DecimalMin:必须为一个不小于指定值的数字
@Digits: 必须为一个小数,且整数部分的位数不能超过 integer,小数部分的位数不能超过 fraction
@Email:必须是 Email,也可以通过正则表达式和 flag 指定自定义的 Email 格式
@Future:必须是一个将来的日期
@Past:必须是一个过去的日期
@Range:必须在指定的范围内
@Size、@Length:长度必须在 min 到 max 之间
@Pattern: 必须符合指定的正则表达式

五、快速失败

🌻 默认情况是检查完全部的错误后才统一抛异常
🌻 可以设置快速失败:只要检测到一个错误,就直接抛出异常,不再继续检测

@Configuration
public class ValidatorConfig {@Beanpublic Validator validator() {return Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();}}

六、自定义校验规则

/*** @author 庆医* @describe 自定义【hibernate-validator】的校验注解* 校验手机号码*/
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IsRightPhone.isRightPhoneValidator.class)
public @interface IsRightPhone {String message() default "手机号码格式错误";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};class isRightPhoneValidator implements ConstraintValidator<IsRightPhone, String> {@Overridepublic boolean isValid(String val,ConstraintValidatorContext context) {if (null == val || val.length() != 11) return false;return val.matches("^((19[0-9])|(13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$");}}}

在这里插入图片描述


http://www.ppmy.cn/news/20198.html

相关文章

Windows中常用的网络排错命令

ping&#xff0c;ipconfig&#xff0c;route&#xff0c;arp&#xff0c;tracert&#xff0c;netstat, telnet常用命令及参数的操作 ping命令 应用场景&#xff1a;用于解决连接、可访问性和名称解析问题。 用法&#xff1a; ping 域名/IP地址 [参数] (如&#xff1a; pi…

【自然语言处理】【分布式训练及推理】推理工具DeepSpeed-Inference

相关博客 【自然语言处理】【分布式训练及推理】推理工具DeepSpeed-Inference 【自然语言处理】【chatGPT系列】大语言模型可以自我改进 【自然语言处理】【ChatGPT系列】WebGPT&#xff1a;基于人类反馈的浏览器辅助问答 【自然语言处理】【ChatGPT系列】FLAN&#xff1a;微调…

Android Studio实现志愿者系统

项目目录一、项目概述二、主要技术三、开发环境四、详细设计1、基础Activity2、活动信息3、成员信息4、百度地图5、Widget组件五、运行演示一、项目概述 本系统采用MVC架构设计&#xff0c;SQLite数据表有用户表、成员表和活动表&#xff0c;有十多个Activity页面。打开应用&a…

如何用Spring整合MyBatis和Junit

Spring整合MyBatis和Junit一. 整合MyBatis1. 目录&#xff1a;2. pom.xml&#xff1a;3. domain层&#xff1a;4. dao层&#xff1a;5. service层&#xff1a;AccountService接口类&#xff1a;AccountServiceImpl实现类&#xff1a;6. jdbc.properties配置文件&#xff1a;7. …

Day14 基于AOP的声明式事务控制

1 Spring 事务编程概述PlatformTransactionManager TransactionDefinition TransactionStatus2 搭建环境数据库准备一个账户表tb account;dao层准备一个AccountMapper&#xff0c;包括incrMoney和decrMoney两个方法;service层准备一个transferMoney方法&#xff0c;分别调用in…

2022年终总结-正月初七

这是毕业的第二年也是第二次写年终总结&#xff0c;元旦过后工作一直忙加上身体不舒服回家过年种种事情拖到现在。 在过去的一年中&#xff0c;爱情和事业都有一些进展。去了老丈人家、双方父母见面&#xff0c;陪小舅子打麻将&#xff0c;夏天在户外烤串等等。涨了工资&#…

Unicode编码

Unicode编码以上我们介绍了中文和西欧的字符与编码&#xff0c;但世界上还有很多其他国家的字符&#xff0c;每个国家的各种计算机厂商都对自己常用的字符进行编码&#xff0c;在编码的时候基本忽略了其他国家的字符和编码&#xff0c;甚至忽略了同一国家的其他计算机厂商&…

这些好用的办公软件分享给你

软件一&#xff1a;备忘录 现在大部分手机备忘录都提供语音记录功能&#xff0c;可以实时录音并转换成文本内容记录下来&#xff0c;使用起来还是比较方便的&#xff0c;但是要注意它支持转换的时长是有限制的哦&#xff01; 操作步骤&#xff1a;打开手机备忘录&#xff0c;…