基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn)方式
SpringBoot服務(wù)端表單數(shù)據(jù)校驗(yàn)
(SpringBoot高級(jí))
一、實(shí)現(xiàn)添加用戶功能1 創(chuàng)建項(xiàng)目
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的啟動(dòng)器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- thymeleaf的啟動(dòng)器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies></project>
3 編寫添加用戶功能
3.1 創(chuàng)建實(shí)體類
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 表單數(shù)據(jù)校驗(yàn) * * */@Controllerpublicclass UsersController { @RequestMapping('/addUser') public String showPage(){ return'add'; } /** * 完成用戶添加 */ @RequestMapping('/save') public String saveUser(Users users){ System.out.println(users); return'ok'; }}
3.3 編寫頁(yè)面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對(duì)表單做數(shù)據(jù)校驗(yàn)
1 SpringBoot對(duì)表單數(shù)據(jù)校驗(yàn)的技術(shù)特點(diǎn)
1.1 SpringBoot中使用了Hibernate-validate校驗(yàn)框架
2 SpringBoot表單數(shù)據(jù)校驗(yàn)步驟
2.1 在實(shí)體類中添加校驗(yàn)規(guī)則
publicclass Users { @NotBlank//非空校驗(yàn) private String name; @NotBlank//密碼非空校驗(yàn) 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 + ']'; } }
2.2 在Controller中開(kāi)啟校驗(yàn)
/** * 完成用戶添加 *@Valid開(kāi)啟對(duì)Users對(duì)象的數(shù)據(jù)校驗(yàn) *BindingResult:封裝了校驗(yàn)的結(jié)果 */ @RequestMapping('/save') public String saveUser(@Valid Users users,BindingResult result){ if(result.hasErrors()){ return'add'; } System.out.println(users); return'ok'; }
2.3 在頁(yè)面中獲取提示信息
<!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當(dāng)中,如果一個(gè)對(duì)象根本不存在,那么他仍然可以在jsp頁(yè)面進(jìn)行遍歷,只不過(guò)為空,不顯示而已,但是在thymeleaf當(dāng)中,如果說(shuō)這個(gè)對(duì)象不存在,他就會(huì)報(bào)以下錯(cuò)誤,解決問(wèn)題的辦法就是在controller中的方法上的傳遞參數(shù)加上這個(gè)對(duì)象,以便在thymeleaf視圖層當(dāng)中,告知這個(gè)對(duì)象是存在于的
解決異常的方法,在跳轉(zhuǎn)頁(yè)面的方法中注入一個(gè)對(duì)象,來(lái)解決問(wèn)題。要求參數(shù)對(duì)象的變量名必須是對(duì)象的類名的全稱首字母小寫。
在springboot 1.5當(dāng)中,參數(shù)變量必須是對(duì)象類的名稱首字母小寫,但是在springboot2.0以上,已經(jīng)很大程度上優(yōu)化了這個(gè)問(wèn)題,變量名稱隨便寫,因?yàn)樵谔D(zhuǎn)頁(yè)面的時(shí)候,將該對(duì)象放入到Model當(dāng)中傳遞,他的key 就是對(duì)象的類的全程首字母大寫(默認(rèn)),在thymeleaf當(dāng)中取出這個(gè)值的時(shí)候,他的key為對(duì)象的類的全程首字母大寫,與參數(shù)的變量名無(wú)任何關(guān)系 如果非要更改Model當(dāng)中的key值,一下有詳解
代碼
/** * 解決異常的方式??梢栽谔D(zhuǎn)頁(yè)面的方法中注入一個(gè)Uesrs對(duì)象。 * 注意:由于springmvc會(huì)將該對(duì)象放入到Model中傳遞。key的名稱會(huì)使用該對(duì)象的駝峰式的命名規(guī)則來(lái)作為key。 * 參數(shù)的變量名需要與對(duì)象的名稱相同。將首字母小寫。 * * @param users * @return */ @RequestMapping('/addUser') public String showPage( Users users){ return'add'; }/** * 完成用戶添加 *@Valid開(kāi)啟對(duì)Users對(duì)象的數(shù)據(jù)校驗(yàn) *BindingResult:封裝了校驗(yàn)的結(jié)果 */ @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>
如果參數(shù)的名稱需要做改變
/** * * 如果想為傳遞的對(duì)象更改名稱,可以使用@ModelAttribute('aa')這表示當(dāng)前傳遞的對(duì)象的key為aa。 * 那么我們?cè)陧?yè)面中獲取該對(duì)象的key也需要修改為aa * @param users * @return */ @RequestMapping('/addUser') public String showPage(@ModelAttribute('aa') Users users){ return'add'; }/** * 完成用戶添加 *@Valid開(kāi)啟對(duì)Users對(duì)象的數(shù)據(jù)校驗(yàn) *BindingResult:封裝了校驗(yàn)的結(jié)果 */ @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>四、其他校驗(yàn)規(guī)則
@NotBlank: 判斷字符串是否為null或者是空串(去掉首尾空格)。
@NotEmpty: 判斷字符串是否null或者是空串。
@Length: 判斷字符的長(zhǎng)度(最大或者最小)
@Min: 判斷數(shù)值最小值
@Max: 判斷數(shù)值最大值
@Email: 判斷郵箱是否合法
補(bǔ)充知識(shí):控制Configuration是否生效,使用Springboot中@ConditionalOnProperty注解
介紹
@ConditionalOnProperty注解的作用是來(lái)控制Configuration是否生效
通過(guò)其兩個(gè)屬性name以及havingValue來(lái)實(shí)現(xiàn)的,其中name用來(lái)從application.properties中讀取某個(gè)屬性值。
matchIfMissing來(lái)控制默認(rèn)值
如果值不為空,則將該值與havingValue指定的值進(jìn)行比較,如果一樣則返回true;否則返回false。
如果返回值為false,則該configuration不生效;為true則生效。
使用
shardingjdbc中可以控制是否啟用,這樣可以針對(duì)某個(gè)配置來(lái)啟動(dòng)數(shù)據(jù)源,完全不影響代碼實(shí)現(xiàn),想完成這個(gè)功能就要用到Stringboot提供的注解@ConditionalOnProperty
因?yàn)槟J(rèn)是true,所以使用可以忽略,但是如果不需要使用,禁用則需要增加配置
spring.shardingsphere.enabled=false
以上這篇基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn)方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python如何實(shí)現(xiàn)word批量轉(zhuǎn)HTML2. python excel和yaml文件的讀取封裝3. python3實(shí)現(xiàn)往mysql中插入datetime類型的數(shù)據(jù)4. python爬蟲(chóng)實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊5. moment轉(zhuǎn)化時(shí)間戳出現(xiàn)Invalid Date的問(wèn)題及解決6. 詳解docker pull 下來(lái)的鏡像都存到了哪里7. Docker鏡像管理常用操作代碼示例9. 關(guān)于 Android WebView 的內(nèi)存泄露問(wèn)題10. Python中內(nèi)建模塊collections如何使用
