六、SpringBoot入门之表单验证(@valid注解)

(一)背景介绍
  表单验证就是对前端传过来的参数进行验证,若不符合规范,可以禁止后续操作,且显示规范中的异常信息。

(二)使用流程
  我们以向girl表中添加数据为例进行讲解。
  1.girl表

CREATE TABLE `girl` (
  `id` int(11) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `cup_size` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

  2.girl类

@Entity
public class Girl {
    @Id
    @GeneratedValue
    private Integer id;

    private String cupSize;

    @Min(value = 18, message = "18岁以下禁止入内!")
    private Integer age;

    /**
     *     当查询的时候返回的实体类是一个对象实例,是hibernate动态通过反射生成的,
     * hibernate框架会调用这个默认构造方法来构造实例对象。
     *     若有多个构造方法,无参构造方法必须有;若无其他构造方法,则无参构造方法可以不写,
     * 因为类默认会有一个无参构造方法
     */
    public Girl() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

  上述代码中,我们对成员变量“age”加了注解@Min(value = 18, message = "18岁以下禁止入内!"),这就是我们的自定义的验证规则:最小值18,当小于18时,异常信息就是”18岁以下禁止入内!”。这个@Min注解是import javax.validation.constraints.Min;包下的,不是Hibernate的。
  3.校验

    /**
     * 增
     * “@Valid”开启校验
     * BindingResult:存放校验结果
     */
    @PostMapping("/girls")
    public Girl addGirl(@Valid Girl girl, BindingResult bindingResult){
        //若不符合约束
        if (bindingResult.hasErrors()){
            //获取不符合约束时,自定义的异常信息
            System.out.println(bindingResult.getFieldError().getDefaultMessage());
            return null;
        }
        return girlService.addGirl(girl);
    }

  定义了校验规则以后,我们需要配合“@Valid”注解,来开启校验,校验结果会存到“BindingResult”中。

(三)注意
  以上的“@Min”、“@Valid”注解和“BindingResult”对象都是javax.validation.Valid包下的,与使用哪种数据库无关。

你可能感兴趣的:(Spring,Boot,从入门到放弃)