后端校验(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}$");
        }
    }
}

相关文章
|
13天前
使用Hibernate-Validate进行参数校验
使用Hibernate-Validate进行参数校验
23 3
|
5月前
|
Java 数据库连接
hibernate-validator校验对象属性为List
hibernate-validator校验对象属性为List
59 1
|
11月前
|
缓存 NoSQL 前端开发
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(三)路由、自定义校验器和 Redis
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(三)路由、自定义校验器和 Redis
|
前端开发 Java 数据库连接
Hibernate Validator -- 伟大的校验器
validator Engine 是支持Javax.validator 的接口的实现, 并且可以通过一些简单的标注的形式(annotation形式)实现一个校验的形式, 它其实也是一个约定大于执行的过程
100 0
|
JSON JavaScript 前端开发
如何优雅地校验后端接口数据,不做前端背锅侠
最近新接手了一批项目,还没来得及接新需求,一大堆bug就接踵而至,仔细一看,应该返回数组的字段返回了 null,或者没有返回,甚至返回了字符串 "null"???
304 0
如何优雅地校验后端接口数据,不做前端背锅侠
|
JSON Java 数据格式
hibernate-validator校验参数(统一异常处理)(下)
hibernate-validator校验参数(统一异常处理)
hibernate-validator校验参数(统一异常处理)(下)
|
Oracle Java 关系型数据库
hibernate-validator校验参数(统一异常处理)(上)
hibernate-validator校验参数(统一异常处理)
hibernate-validator校验参数(统一异常处理)(上)
|
前端开发 安全 Java
前端校验和后端校验的区别和优缺点
前端校验和后端校验的区别和优缺点
746 0
前端校验和后端校验的区别和优缺点
|
存储 中间件 关系型数据库
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
233 0
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
|
Java 数据库连接
[原创]自定义Hibernate Validator校验注解
[原创]自定义Hibernate Validator校验注解
[原创]自定义Hibernate Validator校验注解