1. SpringBoot對表單數(shù)據(jù)校驗的技術(shù)特點
1.1 SpringBoot中使用了Hibernate-validate校驗框架
在web啟動器中引用了hibernate-validator-6.0.12.Final.jar
2. SpringBoot表單數(shù)據(jù)校驗步驟
- 實體類屬性上加上校驗注解
package top.mau5.pojo;
import org.hibernate.validator.constraints.NotBlank;
public class User {
@NotBlank(message="用戶名不能為空")
private String name;
@NotBlank(message="密碼不能為空")
private String password;
@NotBlank
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User(String name, String password, Integer age) {
super();
this.name = name;
this.password = password;
this.age = age;
}
public User() {
super();
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + ", age=" + age + "]";
}
}
- Controller方法上傳參處加上
@Valid
注解
package top.mau5.controller;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import top.mau5.pojo.User;
/**
* SpringBoot表單數(shù)據(jù)校驗
* @author korin
* UserController.java
* 3:35:36 PM
*/
@Controller
public class UserController {
/**
* 頁面顯示異常的方式,可以在跳轉(zhuǎn)頁面的方法中注入一個User對象,
* 注意漆际,由于springmvc會將該對象放入到model中傳遞志于,
* key的名稱會使用該對象的駝峰命名規(guī)則來作為key,
* 參數(shù)的變量名需要與對象的名稱相同装盯,將首字母小寫
*
* 如果想改個名稱坷虑,用注解ModelAttribute("name")來標(biāo)明,
* 這個參數(shù)在model中的key為"name"
* @param user
* @return
*/
@RequestMapping("/addUser")
public String showPage(@ModelAttribute("u") User uuuu) {
return "add";
}
/**
* valid注解:開啟校驗
* @param user
* @param result
* @return
*/
@RequestMapping("/save")
public String save(@Valid @ModelAttribute("u")User user,BindingResult result) {
if(result.hasErrors()) {
return "add";
}
return "ok";
}
}
注意:在Controller的方法的參數(shù)中埂奈,通常User的對象參數(shù)名和類一樣迄损,在這里可以隨意取,如:uuuu账磺,因為在spring中芹敌,默認(rèn)使用類名的小駝峰命名法來表示該類對象,如:User的對象名為user垮抗,而該類屬性的驗證信息是自動放入了Model的對象中傳到了頁面中氏捞,鍵名為“user.屬性名”;而這個鍵名也是可以修改的冒版,在我的Controller中液茎,使用了
@ModelAttribute("u")
來注解,表示返回給頁面的關(guān)于User的驗證信息的鍵名都改為了“u.屬性名”辞嗡。
-
頁面中用
th:errors="${}"
來顯示不滿足要求的數(shù)據(jù)的信息捆等。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form th:action="@{/save}" method="post">
用戶姓名:<input type="text" name="name"/><font color="red" th:errors="${u.name}"></font><br/>
用戶密碼:<input type="password" name="password"/><font color="red" th:errors="${u.password}"></font><br/>
用戶年齡:<input type="text" name="age"/><font color="red" th:errors="${u.age}"></font><br/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
-
測試
常用校驗注解
注解 | 解釋 | 示例 |
---|---|---|
@NotNull | 判斷任何類型的數(shù)據(jù)是否為空 | @NotNull(message="不能為空") |
@NotBlank | 判斷字符串是否為null或者是空串(去掉首尾空格) | @NotBlank(message="不能為空") |
@NotEmpty | 判斷字符串是否null或者是空串 | @NotEmpty(mesage="不能為空") |
@Length | 判斷字符的長度(最大或者最小) | @Length(min=2,max=6,message="最大2续室,最小6") |
@Min | 判斷數(shù)值最小值 | @Min(value=15,message="信息") |
@Max | 判斷數(shù)值最大值 | @Max(value=15,message="信息") |
判斷郵箱格式是否合法 | @Email或@Email(regexp="正則表達(dá)式") | |
@Past | 判斷時間是否是過去的 | @Past(message = "生日必須是過去") |
@Future | 判斷時間是否是未來的 | @Future(message="時間必須是未來的") |
@DecimalMax | 判斷有精確度的數(shù)值的最大值 | @DecimalMax(value = "30.50", message = "余額不能超過30.5") |
@DecimalMin | 判斷有精確度的數(shù)值的最小值 | @DecimalMin(value = "1.50", message = "余額不能低于1.5") |
@AssertTrue | 布爾屬性必須是true | @AssertTrue(message="信息") |
@AssertFlase | 布爾屬性必須是false | @AssertFlase(message="信息") |
@Size | 限定集合大小 | @Size(min=10,max=32) |
...