ssm中使用hibernate-validator驗證BO

来源:http://www.cnblogs.com/leechenxiang/archive/2016/05/31/5546615.html
-Advertisement-
Play Games

目前比較流行的驗證做法:前端jquery-form-validate + 後端hibernate-validate 在pom中添加相關jar: spring mvc中配置: 配置錯誤信息:(當然也可以直接寫在javabean中) entity(setter getter 略): controller ...


目前比較流行的驗證做法:前端jquery-form-validate + 後端hibernate-validate

 

在pom中添加相關jar:

<!-- use hibernate-validator to validate entity before enter controller -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>${validation.api.version}</version>
            </dependency>

spring mvc中配置:

 1 <!-- 國際化配置 -->    
 2     <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
 3     <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
 4         <property name="basenames">
 5             <list>
 6                 <value>classpath:resource/ValidationMessages</value>
 7             </list>
 8         </property>
 9         <property name="useCodeAsDefaultMessage" value="true" />
10     </bean>
11     
12     
13     <!-- 註冊驗證器 -->
14     <mvc:annotation-driven validator="validator" />
15     
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>

配置錯誤信息:(當然也可以直接寫在javabean中)

1 val.age.message=\u5E74\u9F84\u4E0D\u80FD\u8D85\u8FC720\u5C81
2 
3 username.not.null=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
4 pwd.not.null=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
5 username.length=\u7528\u6237\u540D\u6700\u5927\u4E0D\u80FD\u8D85\u8FC7{max},\u6700\u5C0F\u4E0D\u80FD\u5C11\u4E8E{min}
6 
7 email.format.error=\u90AE\u7BB1\u683C\u5F0F\u4E0D\u6B63\u786E
8 
9 title.not.null=\u63A8\u9001\u4E3B\u9898\u4E0D\u80FD\u4E3A\u7A7A

entity(setter getter 略):

 1 public class ValBean {
 2     
 3     
 4     /**
 5      * Bean Validation 中內置的 constraint       
 6      * @Null   被註釋的元素必須為 null       
 7      * @NotNull    被註釋的元素必須不為 null       
 8      * @AssertTrue     被註釋的元素必須為 true       
 9      * @AssertFalse    被註釋的元素必須為 false       
10      * @Min(value)     被註釋的元素必須是一個數字,其值必須大於等於指定的最小值       
11      * @Max(value)     被註釋的元素必須是一個數字,其值必須小於等於指定的最大值       
12      * @DecimalMin(value)  被註釋的元素必須是一個數字,其值必須大於等於指定的最小值       
13      * @DecimalMax(value)  被註釋的元素必須是一個數字,其值必須小於等於指定的最大值       
14      * @Size(max=, min=)   被註釋的元素的大小必須在指定的範圍內       
15      * @Digits (integer, fraction)     被註釋的元素必須是一個數字,其值必須在可接受的範圍內       
16      * @Past   被註釋的元素必須是一個過去的日期       
17      * @Future     被註釋的元素必須是一個將來的日期       
18      * @Pattern(regex=,flag=)  被註釋的元素必須符合指定的正則表達式       
19      * Hibernate Validator 附加的 constraint       
20      * @NotBlank(message =)   驗證字元串非null,且長度必須大於0       
21      * @Email  被註釋的元素必須是電子郵箱地址       
22      * @Length(min=,max=)  被註釋的字元串的大小必須在指定的範圍內       
23      * @NotEmpty   被註釋的字元串的必須非空       
24      * @Range(min=,max=,message=)  被註釋的元素必須在合適的範圍內 
25      */
26     private Long id;
27 
28     @Max(value=20, message="{val.age.message}")   
29     private Integer age;
30     
31     @NotBlank(message="{username.not.null}")
32     @Length(max=6, min=3, message="{username.length}")
33     private String username;
34 
35     @NotBlank(message="{pwd.not.null}")
36     @Pattern(regexp="/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/", message="密碼必須是6~10位數字和字母的組合")
37     private String password;
38     
39     
40     @Pattern(regexp="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$", message="手機號格式不正確")
41     private String phone;
42 
43     @Email(message="{email.format.error}")
44     private String email;
45 }

controller引用:

 1 @Controller
 2 @RequestMapping(value = "/val")
 3 public class ValidateController {
 4 
 5     @RequestMapping(value = "/val", method=RequestMethod.POST)
 6     @ResponseBody
 7     public LeeJSONResult val(@Valid @RequestBody ValBean bean, BindingResult result) throws Exception {
 8         
 9         if(result.hasErrors()){    
10             //如果沒有通過,跳轉提示    
11             Map<String, String> map = getErrors(result);
12             return LeeJSONResult.error(map);
13         }else{    
14             //繼續業務邏輯    
15         } 
16         
17         return LeeJSONResult.ok();
18     }
19     
20     private Map<String, String> getErrors(BindingResult result) {
21         Map<String, String> map = new HashMap<String, String>();
22         List<FieldError> list = result.getFieldErrors();
23         for (FieldError error : list) {
24             System.out.println("error.getField():" + error.getField());
25             System.out.println("error.getDefaultMessage():" + error.getDefaultMessage());
26             
27             map.put(error.getField(), error.getDefaultMessage());
28         }
29         return map;
30     }
31     
32 }

done

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • do-while迴圈和while迴圈非常相似,其區別隻是在於do-while保證必須執行一次,而while在表達式不成立時則可能不做任何操作。 do-while 迴圈只有一種語法: 例子: 該例子也是輸出1到10。 原文地址:http://www.manongjc.com/php/php_while ...
  • 背景:剛剛學到java的String和StringBuffer類,遇到如標題所示的題。 要求:必須要用到String類的toUpperCase方法和toLowerCase方法 思路:用到StringBuffer類的動態添加方法append的方法 代碼如下所示: toUpperCase和toLower ...
  • python中至少包括兩種錯誤:語法錯誤(syntax errors)和異常(exceptions)。 1.語法錯誤 語法錯誤,也被稱作解析錯誤 語法分析器指出錯誤行,並且在檢測到錯誤的位置前面顯示一個小“箭頭”。 錯誤是由箭頭前面的標記引起的(或者至少是這麼檢測的)。錯誤會輸出文件名和行號,所以如 ...
  • Application是所有應用程式類的基類,接下來瞭解一下它的源碼。yii2\base\Application.php。 未完待續。 ...
  • Java讀文件 Java寫文件 ...
  • for($i=0;$i<5;$i++){ $rand .= dechex(rand(1,15)); // 隨機數16進位 1-F 生成5個 } $im = imagecreatetruecolor(100,30); // 驗證碼的大小(畫板) $bg = imagecolorallocate($im ...
  • 一、本節用到的基礎知識 1.逐行讀取文件 2.解析json字元串 Python中有一些內置模塊可以非常便捷地將json字元串轉換為Python對象。比如json模塊中的json.relaods()方法可以將json字元串解析為相應的字典。 運行結果: 3.列表生成式 詳見:http://www.cn ...
  • 最近做spring開發,個人認為,Controller和客戶端js通訊時傳遞的參數類 只使用某幾個方法,為了減少對其他功能的影響,想把參數類定義為Controller類的 嵌套類(內部類)。但是實踐發現不行。 系統會報錯: Servlet.service() for servlet [kingkoo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...