1.什么是JSR303?
JSR303是java為bean數據合法性校驗所提供的一個標准規范,叫做Bean Validation.
Bean Validation是一個運行時的數據校驗框架,在驗證之后驗證的錯誤信息會被馬上返回。
2.實現方式:Hibernate Validator
3.JSR303定義了一套可以標注在成員變量、屬性方法上的校驗注解。
@Null 驗證對象是否為空
@NotNull 驗證對象是否不為空
@AssertTrue 驗證Boolean對象是否為true
@AssertFalse 驗證Boolean對象是否為false
@Min 驗證 Number 和 String 對象是否大等於指定的值
@Max 驗證 Number 和 String 對象是否小等於指定的值
@DecimalMax 被標注的值必須不大於約束中指定的最大值. 這個約束的參數是一個通過BigDecimal定義的最大值的字符 串表示.小數存在精度
@DecimalMin 被標注的值必須不小於約束中指定的最小值. 這個約束的參數是一個通過BigDecimal定義的最小值的字符 串表示.小數存在精度
@Digits(integer=,fraction=) 驗證字符串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內
@Past 驗證 Date 和 Calendar 對象是否在當前時間之前
@Future 驗證 Date 和 Calendar 對象是否在當前時間之后
@Pattern 驗證 String 對象是否符合正則表達式的規則
4.Hibernate Validator是JSR303的一個參考實現,除了支持所有標准的校驗注解之外,它還拓展了如下注解:
@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大於0,只對字符串,且會去掉前后空格
@URL 驗證是否是合法的url
@Email 驗證是否是合法的郵件地址
@CreditCardNumber 驗證是否是合法的信用卡好嗎
@Length(min=, max=) 驗證字符串的長度必須在指定的范圍內
@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.用於array、collection、map、string
@Range(min,max,message) 驗證屬性值必須在合適的范圍內
5.接下來做一個JSR303的測試
5.1新建一個項目,導入springmvc所需的jar包,編寫web.xml和springmvc-config.xml
<!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- spring可以自動去掃描base-package下面的包或者子包下面的java類 如果掃描到有spring相關注解的類,則吧這個類注冊為spring的bean --> <context:component-scan base-package="com.dj.controller" /> <!-- 默認裝配 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 視圖解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前綴 --> <property name="prefix"> <value>/</value> </property> <!-- 后綴 --> <property name="suffix"> <value>.jsp</value> </property> </bean>
5.2因為使用的是hibernate validator的實現,所以要導入所需的jar包,版本是5.4.1如圖所示。
5.3編寫一個用戶注冊的實體類
@NotBlank(message="登錄名不能為空") private String username; @NotBlank(message="密碼不能為空") @Length(min=6,max=18,message="密碼長度必須在6~18位之間") private String password; @Email(message="郵箱格式不正確") private String email; @Pattern(regexp="[1][3|4|5|7|8][0-9]{9}",message="手機號碼格式不正確") private String phone//省略get、set方法
5.4編寫一個controller
@RequestMapping(value="/{pagename}") public String page(@PathVariable String pagename,Model model){ User user = new User(); model.addAttribute("user",user); return pagename; } //數據校驗使用@valid,后面跟着errors對象保存校驗信息 @RequestMapping(value="/test") public String regist(@Valid @ModelAttribute User user,Errors errors,Model model){ if(errors.hasErrors()){ return "regist"; } model.addAttribute("user",user); return "success"; }
5.5編寫注冊頁面
<form:form modelAttribute="user" action="test" method="post"> 用戶名:<form:input path="username"/><span><form:errors path="username" cssStyle="color:red"/></span><br> 密碼:<form:input path="password"/><span><form:errors path="password" cssStyle="color:red"/></span><br> 郵箱:<form:input path="email"/><span><form:errors path="email" cssStyle="color:red"/></span><br> 手機號:<form:input path="phone"/><span><form:errors path="phone" cssStyle="color:red"/></span><br> <input type="submit" value="注冊"> </form:form>
5.6編寫注冊成功頁面顯示注冊信息
用戶名:${user.username }<br> 密碼:${user.password }<br> 郵箱:${user.email }<br> 手機號:${user.phone }<br>
5.7測試結果
源碼下載地址 https://files.cnblogs.com/files/dj-blog/JSR03Test.zip