HibernateValidator校验框架

简介: HibernateValidator校验框架

HibernateValidator校验框架


前言


版本说明

platform-bom=Cairo-SR7


相关链接



注:spring-boot-starter 和 spring-boot-starte-web 都会自动依赖 jakarta.validation-api 的包


常用注解

注解中有个共同的属性 message,可以自定义错误信息


image.png

image.png


实战演练

HibernateValidator 校验框架的使用步骤


  1. 在实体类字段添加校验注解
  2. 在controller层添加@Valid 注解使之生效


实体类

package top.simba1949.common;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
 * @Author Theodore
 * @Date 2019/12/2 17:49
 */
@Data
public class Person implements Serializable {
    private static final long serialVersionUID = -76403129629930396L;
    private Integer id;
    private String username;
    @NotNull(message = "密码不能为空")
    private String password;
}


Controller 层

package top.simba1949.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.simba1949.common.Person;
import javax.validation.Valid;
/**
 * @Author Theodore
 * @Date 2019/12/2 17:50
 */
@Slf4j
@RestController
@RequestMapping("person")
public class PersonController {
    /**
     * 添加注解 @Valid,才能使实体类Person的校验注解生效
     * @param person
     * @return
     */
    @PostMapping
    public String insert(@Valid @RequestBody Person person){
        log.debug("person is {}", person);
        return "SUCCESS";
    }
}

自定义校验注解

自定义校验注解步骤

  1. 自定义注解并指定校验逻辑类
  2. 定义校验逻辑类,实现 ConstraintValidator<A extends Annotation, T> 接口,填写具体的校验逻辑
  3. 和 HibernateValidator 原生注解一样使用即可


自定义注解

package top.simba1949.constraint;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * @Target(value = {ElementType.FIELD, ElementType.METHOD}) 表示作用域
 * @Retention(value = RetentionPolicy.RUNTIME) 表示生效策略
 * @Constraint(validatedBy = ValidEmailHandler.class) 由哪个类进行验证
 *
 * @Author Theodore
 * @Date 2019/12/2 20:25
 */
@Target(value = {ElementType.FIELD, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EmailConstraintValidator.class)
public @interface EmailValidation {
    // message()、groups()、payload() 必须存在
    String message() default "";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}


校验验逻辑类

package top.simba1949.constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 *
 * ConstraintValidator<EmailValidation, String> EmailValidation表示验证哪个注解;String表示用于哪种类型
 *
 * @Author Theodore
 * @Date 2019/12/2 20:32
 */
public class EmailConstraintValidator implements ConstraintValidator<EmailValidation, String> {
   /**
    * 初始化
    * @param constraint
    */
   @Override
   public void initialize(EmailValidation constraint) {
      System.out.println("init");
   }
   /**
    * 真正的校验逻辑
    * @param value 传入的值
    * @param context 注解的上下文
    * @return false 表示验证不通过,true 表示验证通过
    */
   @Override
   public boolean isValid(String value, ConstraintValidatorContext context) {
      final String emailFormat = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
      return value.matches(emailFormat);
   }
}


目录
相关文章
|
前端开发 Java 数据库
Spring Entity数据校验,分组校验,返回校验结果给前端
Spring Entity数据校验,分组校验,返回校验结果给前端
102 0
|
7月前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
72 0
|
前端开发 JavaScript Java
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回
本篇将要学习 Spring Boot 统一功能处理模块,这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor + WebMvcConfigurer 异常处理使用注解 @RestControllerAdvice + @ExceptionHandler 数据格式返回使用注解 @ControllerAdvice 并且实现接口 @ResponseBodyAdvice
776 0
|
消息中间件 JavaScript 小程序
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 下
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 下
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 下
|
Java API
SpringBoot中如何参数校验、统一异常、统一响应以及自定义注解
SpringBoot中如何参数校验、统一异常、统一响应以及自定义注解
327 7
SpringBoot中如何参数校验、统一异常、统一响应以及自定义注解
|
JavaScript 前端开发 小程序
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 上
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 上
|
JSON JavaScript 前端开发
如何优雅地校验后端接口数据,不做前端背锅侠
最近新接手了一批项目,还没来得及接新需求,一大堆bug就接踵而至,仔细一看,应该返回数组的字段返回了 null,或者没有返回,甚至返回了字符串 "null"???
378 0
如何优雅地校验后端接口数据,不做前端背锅侠
|
Oracle Java 关系型数据库
hibernate-validator校验参数(统一异常处理)(上)
hibernate-validator校验参数(统一异常处理)
hibernate-validator校验参数(统一异常处理)(上)
|
JSON Java 数据格式
hibernate-validator校验参数(统一异常处理)(下)
hibernate-validator校验参数(统一异常处理)
hibernate-validator校验参数(统一异常处理)(下)
|
前端开发 Java Spring
更简洁的参数校验,使用 SpringBoot Validation 对参数进行校验
在开发接口时,如果要对参数进行校验,你会怎么写?编写 if-else 吗?虽然也能达到效果,但是不够优雅。 今天,推荐一种更简洁的写法,使用 SpringBoot Validation 对方法参数进行校验,特别是在编写 Controller 层的方法时,直接使用一个注解即可完成参数校验。
358 0
更简洁的参数校验,使用 SpringBoot Validation 对参数进行校验