/** * 添加一個學生 */ @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.