1. 程式人生 > >Hibernate validator使用和自定義validator及整合Spring MVC

Hibernate validator使用和自定義validator及整合Spring MVC

Hibernate validator使用

匯入validation-api-xxx.jar 以及  hibernate-validator-xxx.Final.jar

需要檢查的java bean  Entity.java
  1. import javax.validation.constraints.Max;
  2. import
    org.hibernate.validator.constraints.Length;
  3. public class Entity {
  4. @Max(value= 3) //最大值為3
  5. private int
    age;
  6. @Length(max= 1) //字串長度最大為1,hibernate 擴充套件的
  7. private String name;
  8. public int getAge() {
  9. return
    age;
  10. }
  11. public void setAge(int age) {
  12. this.age = age;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. }
值校驗的測試類
  1. import java.util.Set;
  2. import javax.validation.ConstraintViolation;
  3. import javax.validation.Validation;
  4. import javax.validation.Validator;
  5. import javax.validation.ValidatorFactory;
  6. public class Tv {
  7. public static void main(String[] args) {
  8. ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  9. Validator validator = factory.getValidator();
  10. Entity entity = new Entity();
  11. entity.setAge( 12);
  12. entity.setName( "admin");
  13. Set<ConstraintViolation<Entity>> constraintViolations = validator.validate(entity);
  14. for (ConstraintViolation<Entity> constraintViolation : constraintViolations) {
  15. System.out.println( "物件屬性:"+constraintViolation.getPropertyPath());
  16. System.out.println( "國際化key:"+constraintViolation.getMessageTemplate());
  17. System.out.println( "錯誤資訊:"+constraintViolation.getMessage());
  18. }
  19. }
  20. }
輸出結果
這裡有一個國際化的key值,國際化檔案在org.hibernate.validator下面的一系列的properites檔案裡面,如果需要自定義那麼可以拷貝出來放在src目錄下
這裡我們拷貝一個出來,新增一個key為maxlength=字串長度最大不能超過{max} ,可以使用動態引數,這裡的max值就是註解裡面設定的值 然後修改Entity.java,name屬性的message="{maxlength}"
  1. @Length(max= 1,message= "{maxlength}") //{maxlength}對應配置檔案中的key. 必須有{}
  2. private String name;
再次執行結果如下

自定義validator

首先自定義一個註解CannotContainSpaces (不能包含空格)
  1. import java.lang.annotation.Documented;
  2. import java.lang.annotation.Retention;
  3. import java.lang.annotation.Target;
  4. import javax.validation.Constraint;
  5. import javax.validation.Payload;
  6. @Constraint(validatedBy = CannotContainSpacesValidator.class) //具體的實現
  7. @Target( { java.lang.annotation.ElementType.METHOD,
  8. java.lang.annotation.ElementType.FIELD })
  9. @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
  10. @Documented
  11. public @interface CannotContainSpaces {
  12. String message() default "{Cannot.contain.Spaces} "; //提示資訊,可以寫死,可以填寫國際化的key
  13. int length() default 5;
  14. //下面這兩個屬性必須新增
  15. Class<?>[] groups() default {};
  16. Class<? extends Payload>[] payload() default {};
  17. }
具體實現類CannotContainSpacesValidator.java
  1. import javax.validation.ConstraintValidator;
  2. import javax.validation.ConstraintValidatorContext;
  3. public class CannotContainSpacesValidator implements ConstraintValidator<CannotContainSpaces, String> {
  4. private int len;
  5. /**
  6. * 初始引數,獲取註解中length的值
  7. */
  8. @Override
  9. public void initialize(CannotContainSpaces arg0) {
  10. this.len = arg0.length();
  11. }
  12. @Override
  13. public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) {
  14. if(str != null){
  15. if(str.indexOf( " ") < 0){
  16. return true;
  17. }
  18. } else{
  19. constraintValidatorContext.disableDefaultConstraintViolation(); //禁用預設的message的值
  20. //重新新增錯誤提示語句
  21. constraintValidatorContext
  22. .buildConstraintViolationWithTemplate( "字串不能為空").addConstraintViolation();
  23. }
  24. return false;
  25. }
  26. }
使用的時候直接註解到物件的屬性上面就可以了
  1. @CannotContainSpaces
  2. private String name;
測試當name包含空格的時候 entity.setName("xx xx");
當name為null的時候

整合Spring MVC

首先新增配置檔案內容(實體類裡面的註解與上面完全相同)
  1. <!-- 國際化配置 -->
  2. <bean id="localeResolver"
  3. class= "org.springframework.web.servlet.i18n.CookieLocaleResolver" />
  4. <bean id="messageSource"
  5. class= "org.springframework.context.support.ReloadableResourceBundleMessageSource">
  6. <property name="basenames">
  7. <list>
  8. <value>classpath:messages/messages </value>
  9. <value>classpath:messages/Validation </value>
  10. </list>
  11. </property>
  12. <property name="useCodeAsDefaultMessage" value="true" />
  13. </bean>
  14. <!-- 註冊驗證器 -->
  15. <mvc:annotation-driven validator="validator" />
  16. <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
  17. <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
  18. <!-- 這裡配置將使用上面國際化配置的messageSource -->
  19. <property name="validationMessageSource" ref="messageSource"/>
  20. </bean>
在Spring MVC 控制器中方法屬性如下
  1. /**
  2. * 這裡的@Valid必須書寫, bindingResult引數也必須書寫在後面,否則驗證不通過就會返回400
  3. * @param entity
  4. * @param result
  5. * @return
  6. */
  7. @RequestMapping(value= "/valid")
  8. public String validator(@Valid Entity entity,BindingResult result){
  9. 相關推薦

    Hibernate validator使用定義validator整合Spring MVC

    Hibernate validator使用 匯入validation-api-xxx.jar 以及  hibernate-validator-xxx.Final.jar 需要檢查的java bean  Entity.java

    Hibernate Validator定義驗證

    但有的時候,Hibernate Validator自帶的不能滿足需求,因此就需要我們自定義。 方法如下: 1、建立一個註解 2、實現對該註解的解析 3、把該註解和解析類關聯在一起 比如我們要建立一個違禁詞註解: 1、預設不允許字串中出現有“mmp

    spring boot 定義Validator註解

    pack oot info 周期 pac tps var 虛擬 mage spring boot在Post接受一個對象參數的時候可以使用@Valid去驗證,如下代碼 在創建一個User類 上面的@NotBlank和@Past就做了一個判斷,如何做類似的註解用來驗證數據

    Jquery Validate 預設校驗規則、jQuery.validator.addMethod定義驗證方法---例子

      一、Jquery Validate 預設校驗規則 (1)、required:true 必輸欄位 (2)、remote:"remote-valid.jsp" 使用ajax方法呼叫remote-valid.jsp驗證輸入值 (3)、email:tru

    jQuery.validator.addMethod 定義驗證方法

    1.$.validator.addMethod 方法自定義驗證介紹 該方法可用於我們平時給<input type=" "> 指定type時使用,目的就是可以讓我們自己定義想要驗證的方法,好玩性很高,可以自定義一些通用的驗證,比如手機號碼、身份證等。 2.介紹引數和用法 方法:$.valida

    android藍芽4.0BLE2.0 2.1 apk 串列埠助手帶16個定義按鍵定義指令 字元接收 十六進位制或字元傳送

    android藍芽4.0BLE apk 帶16個自定義按鍵和自定義指令 字元接收 https://pan.baidu.com/s/1eRSfprO android藍芽2.0 2.1 apk 帶16個自定義按鍵和自定義指令 字元接收  帶自動連線 https://pan.b

    Log4J日誌配置詳解定義log4j日誌級別輸出日誌到不同檔案實現方法

    package com.jo.work.log4j; import java.util.Enumeration; import org.apache.log4j.Appender; import org.apache.log4j.FileAppender; import org.apache.log4j.

    ionic tabs完美定義背景點選正常的顏色

    上一篇提到自定義tabs,但是因為時間關係及闡述一點導航欄的東西,沒有完成,這篇接上一篇,接著來自定義tabs,ionic中已經內建了預設的幾種樣式,基本也能滿足了自己的應用,不過公司專案就不行了,公司專案都是ui設計出來的,只能自定義,看下自定義後的最終效果,

    Oracle異常處理舉例(Oracle預定義異常定義異常)

    PL/SQL 異常處理 Oracle系統異常分別為兩大類: 預定義異常:Oracle系統自身提供 自定義異常:Oracle不知曉無法控制的異常,特定的業務邏輯。由使用者在程式中定義,Oracle自動引發Oracle常見的預定義異常 ZERO_DIVIDE

    jquery form validator 驗證 定義 方法

    //中英文字元長度 String.prototype.mb_length = function(){ var len = 0; for(var i = 0; i < this.length; i++) { len += (th

    iOS整合極光推送 通知 定義訊息

    支援的版本 r1.2.5 以後。 功能說明 只有在前端執行的時候才能收到自定義訊息的推送。 從jpush伺服器獲取使用者推送的自定義訊息的內容、標題、附件欄位等。 實現方法 獲取iOS的推送內容需要在delegate類中註冊通知並實現回撥方法。 1、在方法-

    SSM + Shiro 整合 (5)- 定義過濾器許可權解析器、介紹許可權匹配流程

    關於 Shiro 的許可權匹配器和過濾器 上一節,我們實現了自定義的 Realm,方式是繼承 AuthorizingRealm 這個抽象類,分別實現認證的方法和授權的方法。 這一節實現的程式碼的執行順序: 1、Shiro定義的過濾器和自定義的過濾器,在

    1. PMD 使用,編譯定義規則

    自定義 pmd 規則 一 PMD簡介PMD是一款代碼靜態檢查工具,可以檢查出很多代碼中潛在的bug以及讓人感到疑惑的代碼,具體大家可以百度下。二 PMD源代碼下載下載地址:https://github.com/pmd/pmd/tree/pmd/5.5.x需要註意的是註意選擇branch,一般選擇最

    DOM內容操作定義、樣式改變

    abcdefg result 定義 tel class abcde inner 參數 fun 自定義 function 方法名或函數名(參數1,參數2,、、、) { 方法體; return返回值;(可不寫) } function a

    001_定義過濾添加文件內容腳本(nginx)

    parser sys idt fin rip readlines pat utf default 一、工作中遇到sed添加及修改在nginx末尾添加太麻煩了 需求:隨意查找添加一條以前不存在的內容加到"}"前一行 實現: #!/usr/bin/env python #

    Qt定義按鈕不同狀態下圖片的切換

    q自定義窗體、任意形狀的窗體、qt自定義按鈕 好久沒有使用Qt了,最近在做窗體時做了一個自定義的鈕銨,剛開始是想通過修改其MASK和ICON的 方式來實現。確發現效果總是不太如意,如是幹脆自已定義了一個XPushButton。也將其實現方式記錄發 布出來。以方便日後自已使用和給有相應問題的朋友一個小小的

    EL函數定義EL函數

    asm pex cli servle cti 編寫代碼 lower sed 添加 簡介 EL原本是JSTL1.0中的技術(所以EL和JSTL感情如此好就是自然的了),但是從JSP2.0開始,EL就分離出來納入了JSP的標準了。但是EL函數還是和JSTL技術綁定在一起。下面將

    Android零基礎入門第39節:ListActivity定義列表項

    arraylist component save 高速 ram 如果 view設置 ren 屬性 相信通過前兩期的學習,以及會開發最簡單的一些列表界面了吧,那麽本期接著來學習更多方法技巧。 一、使用ListActivity 如果程序的窗口僅僅需要

    java Collections.sort()實現List排序的默認方法定義方法

    public get object 順序 text main 輸出 any 比較 1.java提供的默認list排序方法 主要代碼: List<String> list = new ArrayList();list.add("劉媛媛"); list.add("王

    freemarker實現定義指令定義函數

    數據 dir variables macro 內置 引擎 eem fig turn 自定義指令: 1.指令在前臺實現   <#macro name param1,param2,param3...paramN>   </#macro> 2.指令在後臺實