1. 程式人生 > >Spring Boot入門2——表單驗證

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類,儲存表單提交上來的資料:

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;
	}

}
使用@NotEmpty,@Length等註解,新增message的值,指示如果不符合的話,會得到什麼message。

接下來編寫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     驗證郵箱