基於SpringBoot服務端表單資料校驗的實現方式
SpringBoot服務端表單資料校驗
(SpringBoot高階)
一、實現新增使用者功能
1 建立專案
2 修改POM檔案
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> </parent> <groupId>com.bjsxt</groupId> <artifactId>13-spring-boot-validate</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.7</java.version> <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version> </properties> <dependencies> <!-- springBoot的啟動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- thymeleaf的啟動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies> </project>
3 編寫新增使用者功能
3.1 建立實體類
publicclass Users { private String name; private String password; private Integer age; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } public String getPassword() { returnpassword; } publicvoid setPassword(String password) { this.password = password; } public Integer getAge() { returnage; } publicvoid setAge(Integer age) { this.age = age; } @Override public String toString() { return"Users [name=" + name + ",password=" + password + ",age=" + age + "]"; } }
3.2 編寫Controller
/** * SpringBoot 表單資料校驗 * * */ @Controller publicclass UsersController { @RequestMapping("/addUser") public String showPage(){ return"add"; } /** * 完成使用者新增 */ @RequestMapping("/save") public String saveUser(Users users){ System.out.println(users); return"ok"; } }
3.3 編寫頁面add.html ok.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>新增使用者</title> </head> <body> <form th:action="@{/save}" method="post"> 使用者姓名:<input type="text" name="name"/><br/> 使用者密碼:<input type="password" name="password" /><br/> 使用者年齡:<input type="text" name="age" /><br/> <input type="submit" value="OK"/> </form> </body> </html> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>操作成功</title> </head> <body> OK。。。。 </body> </html>
二、SpringBoot對錶單做資料校驗
1 SpringBoot對錶單資料校驗的技術特點
1.1 SpringBoot中使用了Hibernate-validate校驗框架
2 SpringBoot表單資料校驗步驟
2.1 在實體類中新增校驗規則
publicclass Users { @NotBlank//非空校驗 private String name; @NotBlank//密碼非空校驗 private String password; private Integer age; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } public String getPassword() { returnpassword; } publicvoid setPassword(String password) { this.password = password; } public Integer getAge() { returnage; } publicvoid setAge(Integer age) { this.age = age; } @Override public String toString() { return"Users [name=" + name + ",age=" + age + "]"; } }
2.2 在Controller中開啟校驗
/** * 完成使用者新增 *@Valid開啟對Users物件的資料校驗 *BindingResult:封裝了校驗的結果 */ @RequestMapping("/save") public String saveUser(@Valid Users users,BindingResult result){ if(result.hasErrors()){ return"add"; } System.out.println(users); return"ok"; }
2.3 在頁面中獲取提示資訊
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>新增使用者</title> </head> <body> <form th:action="@{/save}" method="post"> 使用者姓名:<input type="text" name="name"/><font color="red" th:errors="${users.name}"></font><br/> 使用者密碼:<input type="password" name="password" /><font color="red" th:errors="${users.password}"></font><br/> 使用者年齡:<input type="text" name="age" /><font color="red" th:errors="${users.age}"></font><br/> <input type="submit" value="OK"/> </form> </body> </html>
2.4 遇到異常
在jsp當中,如果一個物件根本不存在,那麼他仍然可以在jsp頁面進行遍歷,只不過為空,不顯示而已,但是在thymeleaf當中,如果說這個物件不存在,他就會報以下錯誤,解決問題的辦法就是在controller中的方法上的傳遞引數加上這個物件,以便在thymeleaf檢視層當中,告知這個物件是存在於的
三、解決資料校驗時的異常問題
解決異常的方法,在跳轉頁面的方法中注入一個物件,來解決問題。要求引數物件的變數名必須是物件的類名的全稱首字母小寫。
在springboot 1.5當中,引數變數必須是物件類的名稱首字母小寫,但是在springboot2.0以上,已經很大程度上優化了這個問題,變數名稱隨便寫,因為在跳轉頁面的時候,將該物件放入到Model當中傳遞,他的key 就是物件的類的全程首字母大寫(預設),在thymeleaf當中取出這個值的時候,他的key為物件的類的全程首字母大寫,與引數的變數名無任何關係 如果非要更改Model當中的key值,一下有詳解
程式碼
/** * 解決異常的方式。可以在跳轉頁面的方法中注入一個Uesrs物件。 * 注意:由於springmvc會將該物件放入到Model中傳遞。key的名稱會使用該物件的駝峰式的命名規則來作為key。 * 引數的變數名需要與物件的名稱相同。將首字母小寫。 * * @param users * @return */ @RequestMapping("/addUser") public String showPage( Users users){ return"add"; } /** * 完成使用者新增 *@Valid開啟對Users物件的資料校驗 *BindingResult:封裝了校驗的結果 */ @RequestMapping("/save") public String saveUser( @Valid Users users,BindingResult result){ if(result.hasErrors()){ return"add"; } System.out.println(users); return"ok"; }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>新增使用者</title> </head> <body> <form th:action="@{/save}" method="post"> 使用者姓名:<input type="text" name="name"/><font color="red" th:errors="${users.name}"></font><br/> 使用者密碼:<input type="password" name="password" /><font color="red" th:errors="${users.password}"></font><br/> 使用者年齡:<input type="text" name="age" /><font color="red" th:errors="${users.age}"></font><br/> <input type="submit" value="OK"/> </form> </body> </html>
如果引數的名稱需要做改變
/** * * 如果想為傳遞的物件更改名稱,可以使用@ModelAttribute("aa")這表示當前傳遞的物件的key為aa。 * 那麼我們在頁面中獲取該物件的key也需要修改為aa * @param users * @return */ @RequestMapping("/addUser") public String showPage(@ModelAttribute("aa") Users users){ return"add"; } /** * 完成使用者新增 *@Valid開啟對Users物件的資料校驗 *BindingResult:封裝了校驗的結果 */ @RequestMapping("/save") public String saveUser(@ModelAttribute("aa") @Valid Users users,BindingResult result){ if(result.hasErrors()){ return"add"; } System.out.println(users); return"ok"; }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>新增使用者</title> </head> <body> <form th:action="@{/save}" method="post"> 使用者姓名:<input type="text" name="name"/><font color="red" th:errors="${aa.name}"></font><br/> 使用者密碼:<input type="password" name="password" /><font color="red" th:errors="${aa.password}"></font><br/> 使用者年齡:<input type="text" name="age" /><font color="red" th:errors="${aa.age}"></font><br/> <input type="submit" value="OK"/> </form> </body> </html>
四、其他校驗規則
@NotBlank: 判斷字串是否為null或者是空串(去掉首尾空格)。
@NotEmpty: 判斷字串是否null或者是空串。
@Length: 判斷字元的長度(最大或者最小)
@Min: 判斷數值最小值
@Max: 判斷數值最大值
@Email: 判斷郵箱是否合法
補充知識:控制Configuration是否生效,使用Springboot中@ConditionalOnProperty註解
介紹
@ConditionalOnProperty註解的作用是來控制Configuration是否生效
通過其兩個屬性name以及havingValue來實現的,其中name用來從application.properties中讀取某個屬性值。
matchIfMissing來控制預設值
如果值不為空,則將該值與havingValue指定的值進行比較,如果一樣則返回true;否則返回false。
如果返回值為false,則該configuration不生效;為true則生效。
使用
shardingjdbc中可以控制是否啟用,這樣可以針對某個配置來啟動資料來源,完全不影響程式碼實現,想完成這個功能就要用到Stringboot提供的註解@ConditionalOnProperty
因為預設是true,所以使用可以忽略,但是如果不需要使用,禁用則需要增加配置
spring.shardingsphere.enabled=false
以上這篇基於SpringBoot服務端表單資料校驗的實現方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。