java 使用 Hibernate Validator完成参数必输校验

Posted G_whang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 使用 Hibernate Validator完成参数必输校验相关的知识,希望对你有一定的参考价值。

Hibernate Validator

What

hibernate-validator 是 hibernate 组织下的一个开源项目

hibernate-validator是 Jakarta Bean Validation 3.0.规范的实现。

Jakarta Bean Validation 3.0定义了一个实体和方法验证的元数据模型和 API。

  • 通过使用注解的方式在对象模型上表达约束
  • 以扩展的方式编写自定义约束
  • 提供了用于验证对象和对象图的API
  • 提供了用于验证方法和构造方法的参数和返回值的API
  • 报告违反约定的集合
  • 运行在Java SE,并且集成在Jakarta EE8中
    使用前:
    在这里插入图片描述
    使用后:
    在这里插入图片描述

引用

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-validator</artifactId>
   <version>6.1.5.Final</version>
</dependency>

spring-boot-starter-web已集成,可以直接使用

因为Hibernate Validator 涉及功能比较多,本次只实现必输校验

在接口传输的过程中,对方系统给你一个对象,校验对象中属性是否填写,如果用判空方法一个一个的判断属性,那么工作量会非常大,但是引入了Hibernate Validator 只用加注解即可实现
代码如下:
实体类

import lombok.Data;
import lombok.ToString;

import javax.validation.constraints.NotBlank;

/**
 * 用户实体
 */
@Data
@ToString
public class User {

    @NotBlank(message = "用户编码不能为空")
    private String number;
    @NotBlank(message = "用户姓名不能为空")
    private String name;
    @NotBlank(message = "用户年龄不能为空")
    private String age;


}

校验参数实体

import lombok.Data;

/**
 * 参数校验结果
 */
@Data
public class ParamsCheckRes {
    /**
     * 结果
     */
    private Boolean res = Boolean.FALSE;
    /**
     * 说明
     */
    private String message;

}

controller


import com.example.hibernatevalidatortest.pojo.ParamsCheckRes;
import com.example.hibernatevalidatortest.vo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
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 javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;

/**
 * 用户控制类
 *
 * spring-boot-starter-web已集成,可以直接使用
 *
 */
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @PostMapping("/getUser")
    public User getUser(@RequestBody User user){
        log.info("接收的参数为:{}",user.toString());
        //校验参数
        ParamsCheckRes paramsCheckRes = this.paramCheck(user);
        // 参数校验失败
        if(!paramsCheckRes.getRes()){
            log.info("校验失败:{}",paramsCheckRes.getMessage());
        }
        return user;
    }


    /**
     * 参数校验必填
     * @param data
     * @return
     */
    public ParamsCheckRes paramCheck(User data){

        //获取validator
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        Set<ConstraintViolation<User>> violations = null;
        try {
            violations = validator.validate(data);
        } catch (Exception e) {
            log.error("校验出错,", e);
        }
        ParamsCheckRes res = new ParamsCheckRes();
        if (!CollectionUtils.isEmpty(violations)) {
            StringBuilder errorMsg = new StringBuilder();
            for (ConstraintViolation<User> constraintViolation : violations) {
                errorMsg.append(constraintViolation.getMessage());
                errorMsg.append("\\t");
            }
            log.warn("校验失败", errorMsg);
            res.setMessage(errorMsg.toString());
        } else {
            res.setRes(Boolean.TRUE);
        }
        return res;
    }

}

如果参数为空则打印为空数据
使用postman测试如下
在这里插入图片描述
后台打印日志如下:
在这里插入图片描述
在这里插入图片描述
控制台日志
在这里插入图片描述

以上是关于java 使用 Hibernate Validator完成参数必输校验的主要内容,如果未能解决你的问题,请参考以下文章

数据校验

使用饿了么ui表单验证报错: [Element Warn][Form]model is required for validat

c_cpp validat_bst.cpp

一对多动态添加关联对象的做法

012 添加取派员 - bos

java中validate()函数作用是啥?