Hibernate Validate 校验框架
官网地址:
参数校验
在开发中经常需要编写一些字段校验的代码,但这些又与业务逻辑关系不大的代码带来两个麻烦:
①验证代码繁琐
②方法内代码显得冗长
③验证参数是否完整,需要阅读逻辑代码
现在,我们有了Hibernate Validate 校验框架吗,这些问题得到了解决。
添加依赖
SpringBoot框架:
org.springframework.boot spring-boot-starter-validation注解讲解
@Null 被注释的元素必须为null
@NotNull 被注释的元素必须不为null
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最大值
@Size(max =、min =) 被注释的元素的大小必须在指定的范围内
@Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期
@Pattern (regex =、flag=)被注释的元素必须符合指定的正则表达式
Hibernate validator附加的 constraint
@NotBlank(message=) 验证字符串非nu11,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length (min = max =) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
@Valid 标注在controller层上具体的控制器接收的参数上 表示传进来的值是通过校验的数据
参考
controller层
@RestController
@RequestMapping("Drug")
public class DrugController {
@Autowired
private DrugService drugService;
// 添加药品信息
@PostMapping("add")
public Result addDrug(@Valid Drug drug , BindingResult bindingResult) {
List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError error: allErrors) {
//获取的是校验注解的名称
System.out.println(error.getCode());
//获取的是校验的实体类对象的名称
System.out.println(error.getObjectName());
//获取校验未通过的属性名称
System.out.println(error.getArguments());
//获取校验失败默认的信息
System.out.println(error.getDefaultMessage());
//获取校验的实体类
System.out.println(error.getClass());
}
if (!allErrors.isEmpty()){
return Result.error("你传的参数有异常,校验失败");
}
boolean flag = drugService.save(drug);
if (flag != true) {
return Result.error("添加失败");
}
return Result.ok("添加成功");
}
}
BindingResult 是来接收校验数据的信息,它和@Valid注解配合使用,缺一不可
pojo层
package com.hh.pojo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
@Data
@TableName(value = "drug")
public class Drug {
@TableId
private Integer id;
private Integer drug_id;
@NotBlank(message = "请查看名字是否为空")
private String drug_name;
@Min(value = 0,message = "商品价格不能低于0元")
private Double drug_price;
@Min(value = 0,message = "商品数量不能是负数")
private Integer drug_number;
@Range(min = 0,max = 1,message = "请确认好商品目前状态")
private Integer status;
@Override
public String toString() {
return "Drug{" +
"id=" + id +
", drug_id=" + drug_id +
", drug_name='" + drug_name + '\'' +
", drug_price=" + drug_price +
", drug_number=" + drug_number +
'}';
}
}