(一)背景介绍
表单验证就是对前端传过来的参数进行验证,若不符合规范,可以禁止后续操作,且显示规范中的异常信息。
(二)使用流程
我们以向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
包下的,与使用哪种数据库无关。