Hibernate Validate 校验框架

80 阅读3分钟

Hibernate Validate 校验框架

官网地址:

docs.jboss.org/hibernate/v…

参数校验

在开发中经常需要编写一些字段校验的代码,但这些又与业务逻辑关系不大的代码带来两个麻烦:

①验证代码繁琐

②方法内代码显得冗长

③验证参数是否完整,需要阅读逻辑代码

现在,我们有了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 +
                '}';
    }
}