/** * 添加一个学生 */ @PostMapping("/students") public Student studentAdd(@RequestParam("name") String name, @RequestParam("age") Integer age){ Student student=new Student(); student.setName(name); student.setAge(age); return stuentRepository.save(student); }
如上代码,添加学生的方法须要接受两个参数:name和age,但现实业务状况下,一个实体类中极可能有不少属性,新增记录的时候就要传入不少参数,因此更为简便的方式是传入一个pojo对象来代替一堆属性java
那么如何进行数据校验呢?好比,咱们须要限制学生年龄不得小于10岁,该如何进行操做呢?git
1. 首先,在待校验字段上加上 @Min 注解,value属性表明最小的年龄,message属性表明校验错误时返回的信息:正则表达式
2. 在方法入参处使用 @Valid 注解修饰,代表该入参是待校验的,同时,方法入参再加上BindingResult,该对象用来保存错误信息:app
/** * 添加一个学生 */ @PostMapping("/students") public Student studentAdd(@Valid Student student , BindingResult result){ if (result.hasErrors()){ System.out.println(result.getFieldError().getDefaultMessage()); return null; } student.setName(student.getName()); student.setAge(student.getAge()); return stuentRepository.save(student); }
3. 在执行方法体以前判断BindingResult中是否含有错误,如果校验出错,则打印错误并返回空值(退出程序)spa
其余的表单验证注解:.net
@NotEmpty | 不为null,且长度大于0 |
@Length | 示例:@Length(min=6, message="密码长度不能少于6位") |
@null | 验证对象是否为空 |
@notnull | 验证对象是否为非空 |
@asserttrue | 验证 boolean 对象是否为 true |
@assertfalse | 验证 boolean 对象是否为 false |
@min | 验证 number 和 string 对象是否大等于指定的值 |
@max | 验证 number 和 string 对象是否小等于指定的值 |
@decimalmin | 验证 number 和 string 对象是否大等于指定的值,小数存在精度 |
@decimalmax | 验证 number 和 string 对象是否小等于指定的值,小数存在精度 |
@size | 验证对象(array,collection,map,string)长度是否在给定的范围以内 |
@digits | 验证 number 和 string 的构成是否合法 |
@past | 验证 date 和 calendar 对象是否在当前时间以前 |
@future | 验证 date 和 calendar 对象是否在当前时间以后 |
@pattern | 验证 string 对象是否符合正则表达式的规则 |
验证邮箱 |
对一些类似的注解进行辨析:code
1.@NotNull:不能为null,但能够为empty对象
(""," "," ")2.@NotEmpty:不能为null,并且长度必须大于0ci
(" "," ")3.@NotBlank:只能做用在String上,不能为null,并且调用trim()后,长度必须大于0get
("test") 即:必须有实际字符
@Length 支持类型: CharSequence
@Size 支持类型:String, Collection, Map 和 arrays. Additionally supported by HV:
any sub-type of CharSequence.