JSR表单校验框架
表單校驗的重要性:
表單校驗保障了數(shù)據(jù)有效性、安全性
不適用表單檢驗數(shù)據(jù)可以隨意輸入,導(dǎo)致錯誤的結(jié)果。后端表單校驗的重要性,比如輸入框采集成績,如果前端做了檢驗,但是用戶比較牛逼,他在地址欄上直接加?score=1000000
表單校驗分類:
校驗位置:
- 客戶端校驗
- 服務(wù)端校驗
校驗格式:
- 客戶端:使用Js技術(shù),利用正則表達式校驗
- 服務(wù)端:使用校驗框架
邏輯校驗:
- 客戶端:使用ajax發(fā)送要校驗的數(shù)據(jù),在服務(wù)端完成邏輯校驗,返回校驗結(jié)果
- 服務(wù)端:接收到完整的請求后,在執(zhí)行業(yè)務(wù)操作前,完成邏輯校驗
表單校驗規(guī)則:
- 長度:例如用戶名長度,評論字符數(shù)量
- 非法字符:例如用戶名組成
- 數(shù)據(jù)格式:例如Email格式、 IP地址格式
- 邊界值:例如轉(zhuǎn)賬金額上限,年齡上下限
- 重復(fù)性:例如用戶名是否重復(fù)
JSR規(guī)范列表:
JSR(Java Specification Requests):Java 規(guī)范提案
303:提供bean屬性相關(guān)校驗規(guī)則
企業(yè)應(yīng)用技術(shù):
- Contexts and Dependency Injection for Java (Web Beans 1.0) (JSR 299)
- Dependency Injection for Java 1.0 (JSR 330)@postConstruct, @PreDestroy
- Bean Validation 1.0 (JSR 303)
- Enterprise JavaBeans 3.1 (includes Interceptors 1.1) (JSR 318)
- Java EE Connector Architecture 1.6 (JSR 322)
- Java Persistence 2.0 (JSR 317)
- Common Annotations for the Java Platform 1.1 (JSR 250)
- Java Message Service API 1.1 (JSR 914)
- Java Transaction API (JTA) 1.1 (JSR 907)
- JavaMail 1.4 (JSR 919)
Web應(yīng)用技術(shù):
- Java Servlet 3.0 (JSR 315)
- JavaServer Faces 2.0 (JSR 314)
- JavaServer Pages 2.2/Expression Language 2.2 (JSR 245)
- Standard Tag Library for JavaServer Pages (JSTL) 1.2 (JSR 52)
- Debugging Support for Other Languages 1.0 (JSR 45)
- 模塊化 (JSR 294)
- Swing應(yīng)用框架 (JSR 296)
- JavaBeans Activation Framework (JAF) 1.1 (JSR 925)
管理與安全技術(shù):
- Java Authentication Service Provider Interface for Containers (JSR 196)
- Java Authorization Contract for Containers 1.3 (JSR 115)
- Java EE Application Deployment 1.2 (JSR 88)
- J2EE Management 1.1 (JSR 77)
- Java SE中與Java EE有關(guān)的規(guī)范
- JCache API (JSR 107)
- Java Memory Model (JSR 133)
- Concurrency Utilitie (JSR 166)
- Java API for XML Processing (JAXP) 1.3 (JSR 206)
- Java Database Connectivity 4.0 (JSR 221)
- Java Management Extensions (JMX) 2.0 (JSR 255)
- Java Portlet API (JSR 286)
Web Service技術(shù):
- Java Date與Time API (JSR 310)
- Java API for RESTful Web Services (JAX-RS) 1.1 (JSR 311)
- Implementing Enterprise Web Services 1.3 (JSR 109)
- Java API for XML-Based Web Services (JAX-WS) 2.2 (JSR 224)
- Java Architecture for XML Binding (JAXB) 2.2 (JSR 222)
- Web Services Metadata for the Java Platform (JSR 181)
- Java API for XML-Based RPC (JAX-RPC) 1.1 (JSR 101)
- Java APIs for XML Messaging 1.3 (JSR 67)
- Java API for XML Registries (JAXR) 1.0 (JSR 93)
- JCP(Java Community Process):Java社區(qū)
Hibernate框架中包含一套獨立的校驗框架hibernate-validator
Hibernate使用的話需要用高版本的tomcat
導(dǎo)入坐標(biāo)
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>6.1.0.Final</version> </dependency>注意:
tomcat7 :搭配hibernate-validator版本5.*.*.Final
tomcat8.5↑ :搭配hibernate-validator版本6.*.*.Final
快速使用:
1. 開啟校驗
- 名稱:@Valid 、 @Validated
- 類型:形參注解
- 位置:處理器類中的實體類類型的方法形參前方
- 作用:設(shè)定對當(dāng)前實體類類型參數(shù)進行校驗
2.設(shè)置校驗規(guī)則
- 名稱:@NotNull
- 類型:屬性注解 等
- 位置:實體類屬性上方
- 作用:設(shè)定當(dāng)前屬性校驗規(guī)則
- 范例:
每個校驗規(guī)則所攜帶的參數(shù)不同,根據(jù)校驗規(guī)則進行相應(yīng)的調(diào)整
具體的校驗規(guī)則查看對應(yīng)的校驗框架進行獲取
3.獲取錯誤信息
@RequestMapping(value = "/addemployee") public String addEmployee(@Valid Employee employee, Errors errors, Model model){System.out.println(employee);if(errors.hasErrors()){for(FieldError error : errors.getFieldErrors()){model.addAttribute(error.getField(),error.getDefaultMessage());}return "addemployee.jsp";}return "success.jsp"; }通過形參Errors獲取校驗結(jié)果數(shù)據(jù),通過Model接口將數(shù)據(jù)封裝后傳遞到頁面顯示
<form action="/addemployee" method="post">員工姓名:<input type="text" name="name"><span style="color:red">${name}</span><br/>員工年齡:<input type="text" name="age"><span style="color:red">${age}</span><br/><input type="submit" value="提交"> </form>通過形參Errors獲取校驗結(jié)果數(shù)據(jù),通過Model接口將數(shù)據(jù)封裝后傳遞到頁面顯示
頁面獲取后臺封裝的校驗結(jié)果信息
多規(guī)則校驗:
同一個屬性可以添加多個校驗器
@NotNull(message = "請輸入您的年齡") @Max(value = 60,message = "年齡最大值不允許超過60歲") @Min(value = 18,message = "年齡最小值不允許低于18歲") private Integer age;//員工年齡3種判定空校驗器的區(qū)別:
嵌套校驗:
- 名稱:@Valid
- 類型:屬性注解
- 位置:實體類中的引用類型屬性上方
- 作用:設(shè)定當(dāng)前應(yīng)用類型屬性中的屬性開啟校驗
- 范例:
注意:開啟嵌套校驗后,被校驗對象內(nèi)部需要添加對應(yīng)的校驗規(guī)則
分組校驗:
同一個模塊,根據(jù)執(zhí)行的業(yè)務(wù)不同,需要校驗的屬性會有不同
- 新增用戶
- 修改用戶
對不同種類的屬性進行分組,在校驗時可以指定參與校驗的字段所屬的組類別
- 定義組(通用)
- 為屬性設(shè)置所屬組,可以設(shè)置多個
- 開啟組校驗
總結(jié)
- 上一篇: php mysql搭建_PHP+MYSQ
- 下一篇: SpringMVC异常处理 自定义异常