后端校验(hibernate-validator)

简介: 后端校验(hibernate-validator)


一、介绍和依赖

🌻 在 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 {
    @Bean
    public 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> {
        @Override
        public 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}$");
        }
    }
}

相关文章
|
26天前
|
算法 安全 API
绕过后端校验的策略
绕过后端校验的策略
27 0
|
3月前
|
安全 C# 数据安全/隐私保护
后端使用C#正则校验密码
这篇文章提供了一个使用C#编写的密码校验示例,通过正则表达式匹配8-16位的密码,确保密码中至少包含一个大写字母、一个小写字母、一个数字以及一个特殊字符。
23 1
后端使用C#正则校验密码
|
5月前
|
中间件 Go
go语言后端开发学习(三)——基于validator包实现接口校验
go语言后端开发学习(三)——基于validator包实现接口校验
|
4月前
|
前端开发 JavaScript Java
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
|
5月前
|
数据库
大事件后端项目25-------更新文章分类和添加文章分类---分组校验
大事件后端项目25-------更新文章分类和添加文章分类---分组校验
|
6月前
使用Hibernate-Validate进行参数校验
使用Hibernate-Validate进行参数校验
74 3
|
11月前
|
Java 数据库连接
hibernate-validator校验对象属性为List
hibernate-validator校验对象属性为List
186 1
|
缓存 NoSQL 前端开发
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(三)路由、自定义校验器和 Redis
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(三)路由、自定义校验器和 Redis
|
前端开发 Java 数据库连接
Hibernate Validator -- 伟大的校验器
validator Engine 是支持Javax.validator 的接口的实现, 并且可以通过一些简单的标注的形式(annotation形式)实现一个校验的形式, 它其实也是一个约定大于执行的过程
153 0
|
JSON JavaScript 前端开发
如何优雅地校验后端接口数据,不做前端背锅侠
最近新接手了一批项目,还没来得及接新需求,一大堆bug就接踵而至,仔细一看,应该返回数组的字段返回了 null,或者没有返回,甚至返回了字符串 "null"???
365 0
如何优雅地校验后端接口数据,不做前端背锅侠