Spring Boot入門2——表單驗證
表單驗證,即校驗使用者提交的資料的合理性的,比如是否為空了,密碼長度是否大於6位,是否是純數字的,等等。Spring boot是如何幫我們實現表單驗證的呢?
假設現在我們存在這麼一個註冊介面:
需要驗證提交上去的使用者名稱,密碼。是否為空,以及其他的一些問題。我們需要怎麼做呢?<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>hello spring boot</title> </head> <body> <form action="/doRegister" method="post"> <p>姓名:<input type="text" name="username"/> </p> <p>密碼:<input type="text" name="password"/> </p> <p><button>提交</button></p> </form> </body> </html>
首先我們需要一個實體類:User類,儲存表單提交上來的資料:
使用@NotEmpty,@Length等註解,新增message的值,指示如果不符合的話,會得到什麼message。public class User { private int id; @NotEmpty(message="使用者名稱不能為空") private String username; @NotEmpty(message="密碼不能為空") @Length(min=6, message="密碼長度不能少於6位") private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
接下來編寫Controller類:使用@Valid註解驗證資料,並且使用BindingResult獲取結果。
@Controller public class FormController { @RequestMapping(value="/register", method=RequestMethod.GET) public String register() { return "register"; } @RequestMapping(value = "/doRegister", method = RequestMethod.POST) public @ResponseBody User doRegister(@Valid User user, BindingResult result, Model model) { if (result.hasErrors()) { List<ObjectError> list = result.getAllErrors(); for (ObjectError error : list) { System.out.println(error.getDefaultMessage()); } return null; } System.out.println("註冊.."); return user; } }
這樣就完成了一個簡單的表單驗證。
而除了@NotEmpty,@Length之外,還有很多其他的註解:
@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 物件是否符合正則表示式的規則
@Email 驗證郵箱