BindRedult干啥的?
对实体类的参数合法性进行后端代码的校验,也可在前端输入时进行校验
导入依赖包
Bean-validator.jar
实体类上标记验证方式
1.参数上标记
public class Student implements Serializable {
@NotEmpty(message = "学生姓名不为空")
private String sname;
@NotEmpty
@Size(min=18,max=24)
//@Size只适合验证Array,Collection,Map,String
private String password;
@Max(24)
@Min(18,message = "年龄必须大于18岁")
@NotEmpty
//int类型在表单值为“”时无法转换为int,Interger可以为null
private Interger age;
@AssertTrue
private boolean ifAgree;
@Email(message="邮箱格式错误")
private String email;
//省略封装
}
2.controller控制层写参数接收的入口
需要注意的是@Valid 和 BindingResult 是一 一对应的,如果有多个@Valid,那么每个@Valid后面都需要添加BindingResult用于接收bean中的校验信息
public void testBindingResult(@Valid @RequestBody Student student,BindingResult bindingResult)
{
log.info("test start");
if(bindingResult.hasErrors()){
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
fieldErrors.forEach(fieldError -> {
//日志打印不符合校验的字段名和错误提示
log.error("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
});
for(int i=0;i<fieldErrors.size();i++){
//控制台打印不符合校验的字段名和错误提示
System.out.println("error field is :"+fieldErrors.get(i).getField()+",message is :"+fieldErrors.get(i).getDefaultMessage());
}
}
System.out.println("bindresult无错误");
}