资讯专栏INFORMATION COLUMN

Hibernate Validator入门及使用

TANKING / 1649人阅读

摘要:前言最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。

前言

最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。SpringBoot自带了参数验证框Hibernate Validator,下面是自己的学习笔记。

依赖
若使用SptingBoot,在spring-boot-starter-web包中包含此框架依赖,其他框架加入依赖即可
    
      org.hibernate.validator
      hibernate-validator
      6.0.17.Final
    

个人认为官方文档是最好的资料,如有需要请浏览:https://docs.jboss.org/hibern...

使用

新建类User

package com.longhc.uublog;

import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.io.Serializable;

@Getter
@Setter
@NoArgsConstructor
public class User implements Serializable {
    private static final long serialVersionUID = -2164567260938543876L;

    private String userId;
    
    // 字段userName不可为null,且length>0
    @NotBlank
    private String userName;
    
    // 密码需要匹配正则表达式
    @Pattern(regexp = "^[A-Z]{0,3}[0-9]{5,10}")
    private String password;

    // 验证是否是正确的电子邮件格式
    @Email
    private String email;

    // 家庭住址不为空
    @NotNull
    private String address;

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}

使用Validator校验传入参数是否符合规则

package com.longhc.uublog;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

@Slf4j
public class VaildatorTest {

    @Test
    public void test() {
        // 获得默认的Validator
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

        Consumer consumer = new Consumer();
        consumer.setUserName("longhaicheng");
        consumer.setAddress(null);
        consumer.setEmail("123456789");
        // 验证consumer是否符合要求,并返回set集合,若set集合size()返回>0,说明存在违规的参数,通过日志打印
        Set> constraintViolations = validator.validate(consumer);
        if (constraintViolations.size() > 0) {
            for (ConstraintViolation constraintViolation : constraintViolations) {
                String message = constraintViolation.getMessage();
                log.error("message:{}", message);
            }
        }
    }
}

日志返回:

参数校验失败返回错误消息,也可以定制错误消息,通过注解中的message属性配置

@NotBlank(message = "字段[userName]不可为空")
@Pattern(regexp = "^[A-Z]{0,3}[0-9]{5,10}",message = "字段[password]需匹配表达式[{regexp}]")
@Email(message = "错误的电子邮箱格式")
@NotNull(message = "家庭住址不为空")

要在Spring中使用此框架

package com.longhc.uublog;

import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.HibernateValidator;
import org.springframework.stereotype.Component;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;



@Component
@Slf4j
public class ValidatorUtil {

    public static Validator getValidator() {
        // 使用HibernateValidator
        Validator validator = Validation.byProvider(HibernateValidator.class)
                .configure()
                // 快速失败(即:第一个参数校验失败就返回错误信息,而不是校验所有的参数,并一次性返回所有的错误信息)
                .failFast(true)
                .buildValidatorFactory()
                .getValidator();
        return validator;
    }

    /**
     * @param object object
     * @param groups groups
     */
    public void validateObject(Object object, Class... groups) {
        Set> constraintViolations = getValidator().validate(object, groups);
        if (constraintViolations.size() > 0) {
            for (ConstraintViolation constraintViolation : constraintViolations) {
                String message = constraintViolation.getMessage();
                log.error("errorMessage:{}", message);
            }
        }
    }
}
           
               
                                           
                       
                 
            
                     
             
               

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77917.html

相关文章

  • Hibernate Validator入门使用

    摘要:前言最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。 前言 最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。SpringBoot自带了参数验证框Hibernate Validator,下面是自己的学习笔记。 ...

    kid143 评论0 收藏0
  • Hibernate Validator—更简洁的参数校验一个util

    摘要:代码地址简介是项目中的一个数据校验框架,是的参考实现,除了提供了规范中所有内置的实现,还有一些附加的。使用能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便简单。 代码地址 https://github.com/wheel-orga... 简介 hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validati...

    Jiavan 评论0 收藏0
  • Spring Boot - 表单校验(JSR303&Hibernate Validator

    摘要:初步使用主要使用注解的方式对进行校验,第一个例子在需要校验的字段上指定约束条件然后在中可以这样调用,加上注解即可。如果校验失败,默认会返回框架的出错信息。指定到的分组名会全部进行校验,不指定的不校验。 Spring Boot - 表单校验(JSR303&Hibernate Validator) 回顾 Spring Boot - 初识 Hello World Spring Boot -...

    tinyq 评论0 收藏0
  • 利用注解对Bean进行校验

    摘要:所以就有今天的话题利用注解对进行校验。利用注解对进行校验,主要是利用框架,实现了的接口关于校验的接口,直接使用非常方便,省时省力。 最近写业务代码,因为页面复杂,导致对应的Bean属性非常多,而产品大佬又提出各种校验要求。 emmmmmm......如果写if条件来校验,那简直是又臭又长。 所以就有今天的话题——利用注解对Bean进行校验。 利用注解对Bean进行校验,主要是利用hib...

    dmlllll 评论0 收藏0
  • JAVA中通过Hibernate-Validation进行参数验证

    摘要:在开发服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而提供了一些常用的参数校验注解,我们可以拿来使用。 在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用。1.maven中引入hibernate-validator对应的jar: org.hibernate ...

    Coly 评论0 收藏0

发表评论

0条评论

TANKING

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<