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