1. 程式人生 > >Spring Validation(使用Hibernate Validator)

Spring Validation(使用Hibernate Validator)

1、需要的jar包

hibernate-validator.5.1.3.Final.jar

validation-api.1.1.0.Final.jar

2、springsevlet-config.xml配置

在spring3之後,任何支援JSR303的validator(如Hibernate Validator)都可以通過簡單配置引入,只需要在配置xml中加入,這時validatemessage的屬性檔案預設為classpath下的ValidationMessages.properties

<!-- support JSR303 annotation if JSR 303 validation present on classpath 
--> <mvc:annotation-driven />

如果不使用預設,可以使用下面配置:

複製程式碼
<mvc:annotation-driven validator="validator" />

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"
/> <!--不設定則預設為classpath下的ValidationMessages.properties --> <property name="validationMessageSource" ref="validatemessageSource"/> </bean>
<bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property
name="basename" value="classpath:validatemessages"/> <property name="fileEncodings" value="utf-8"/> <property name="cacheSeconds" value="120"/> </bean>
複製程式碼

 3、hibernate validator constraint 註解

複製程式碼
Bean Validation 中內建的 constraint         
@Null   被註釋的元素必須為 null    
@NotNull    被註釋的元素必須不為 null    
@AssertTrue     被註釋的元素必須為 true    
@AssertFalse    被註釋的元素必須為 false    
@Min(value)     被註釋的元素必須是一個數字,其值必須大於等於指定的最小值    
@Max(value)     被註釋的元素必須是一個數字,其值必須小於等於指定的最大值    
@DecimalMin(value)  被註釋的元素必須是一個數字,其值必須大於等於指定的最小值    
@DecimalMax(value)  被註釋的元素必須是一個數字,其值必須小於等於指定的最大值    
@Size(max=, min=)   被註釋的元素的大小必須在指定的範圍內    
@Digits (integer, fraction)     被註釋的元素必須是一個數字,其值必須在可接受的範圍內    
@Past   被註釋的元素必須是一個過去的日期    
@Future     被註釋的元素必須是一個將來的日期    
@Pattern(regex=,flag=)  被註釋的元素必須符合指定的正則表示式    
    
Hibernate Validator 附加的 constraint    
@NotBlank(message =)   驗證字串非null,且長度必須大於0    
@Email  被註釋的元素必須是電子郵箱地址    
@Length(min=,max=)  被註釋的字串的大小必須在指定的範圍內    
@NotEmpty   被註釋的字串的必須非空    
@Range(min=,max=,message=)  被註釋的元素必須在合適的範圍內 
複製程式碼

 4、使用validator

在需要校驗的物件前增加@Valid 註解(該註解位於javax.validation包中)來觸發校驗。這樣就可以完成針對輸入資料User物件的校驗了,校驗結果任然儲存在BindingResult物件中。

複製程式碼
 1 package com.mkyong.common.model;
 2  
 3 import org.hibernate.validator.constraints.NotEmpty;
 4 import org.hibernate.validator.constraints.Range;
 5  
 6 public class Customer {
 7  
 8     @NotEmpty //make sure name is not empty
 9     String name;
10  
11     @Range(min = 1, max = 150) //age need between 1 and 150
12     int age;
13  
14     //getter and setter methods
15  
16 }
複製程式碼 複製程式碼
 1 package com.mkyong.common.controller;
 2  
 3 import javax.validation.Valid;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.ui.ModelMap;
 6 import org.springframework.validation.BindingResult;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.RequestMethod;
 9 import com.mkyong.common.model.Customer;
10  
11 @Controller
12 @RequestMapping("/customer")
13 public class SignUpController {
14  
15     @RequestMapping(value = "/signup", method = RequestMethod.POST)
16     public String addCustomer(@Valid Customer customer, BindingResult result) {
17  
18         if (result.hasErrors()) {
19             return "SignUpForm";
20         } else {
21             return "Done";
22         }
23  
24     }
25  
26     @RequestMapping(method = RequestMethod.GET)
27     public String displayCustomerForm(ModelMap model) {
28  
29         model.addAttribute("customer", new Customer());
30         return "SignUpForm";
31  
32     }
33  
34 }
複製程式碼 複製程式碼
 1 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
 2 <html>
 3 <head>
 4 <style>
 5 .error {
 6     color: #ff0000;
 7 }
 8  
 9 .errorblock {
10     color: #000;
11     background-color: #ffEEEE;
12     border: 3px solid #ff0000;
13     padding: 8px;
14     margin: 16px;
15 }
16 </style>
17 </head>
18  
19 <body>
20     <h2>Customer SignUp Form - JSR303 @Valid example</h2>
21  
22     <form:form method="POST" commandName="customer" action="customer/signup">
23         <form:errors path="*" cssClass="errorblock" element="div" />
24         <table>
25             <tr>
26                 <td>Customer Name :</td>
27                 <td><form:input path="name" /></td>
28                 <td><form:errors path="name" cssClass="error" /></td>
29             </tr>
30             <tr>
31                 <td>Customer Age :</td>
32                 <td><form:input path="age" /></td>
33                 <td><form:errors path="age" cssClass="error" /></td>
34             </tr>
35             <tr>
36                 <td colspan="3"><input type="submit" /></td>
37             </tr>
38         </table>
39     </form:form>
40  
41 </body>
42 </html>
複製程式碼

可以通過定義“validatemessage.properties”檔案,覆蓋定義在持久化物件上的錯誤提示,通常屬性檔案中屬性key為“@Annotation Name.object.fieldname“的形式:

NotEmpty.customer.name = Name is required!
Range.customer.age = Age value must be between 1 and 150

程式碼執行Demo:

5、參考

相關推薦

java校驗APIHibernate Validator

hibernate Validator 是 Bean Validation 的參考實現 。Hibernate Validator 提供了 JSR 303 規範中所有內建 constraint 的實現,除此之外還有一些附加的 constraint。 在日常開發中,Hib

Spring Validation使用Hibernate Validator

1、需要的jar包 hibernate-validator.5.1.3.Final.jar validation-api.1.1.0.Final.jar 2、springsevlet-config.xml配置 在spring3之後,任何支援JSR303的validator(如Hibernate Valida

深入JVM分析spring-boot應用hibernate-validator

using virtual orf replace vid share create sun abs 問題 可重現的Demo代碼:demo.zip 最近排查一個spring boot應用拋出hibernate.validator NoClassDefFoundE

hibernateHibernate SQL 方言hibernate.dialect

hibernate where sof nod red poi form sybase ora 參考如下: RDBMSDialect DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.d

幹貨分享微服務spring-cloud1.初探

前言 文件 配置文件 numeric .profile eas dfa 關系 tle 前言讀者:對spring、spring boot有一定了解難度:初中級,旨在快速應用於項目參考文獻:網絡、書籍、官方文檔,有任何錯誤歡迎大家留言拍磚指正實戰模擬源碼:https://git

spring MVC 使用 hibernate validator驗證框架,國際化配置

dex erp fault reg path api turn regex oca spring mvc使用hibernate validator框架可以實現的功能: 1. 註解java bean聲明校驗規則。 2. 添加message錯誤信息源實現國際化配置。 3.

Spring框架第一天

框架 inf AS 功能 工廠設計 AR void getbean under 一、 引言 a) 什麽是Spring框架?(spring官網:www.springsource.org) 3.x 不提供第三發依賴jar 目前已經到了5.x版本。 Spring輕量級(代碼

Spring框架第二天

boolean 反射 rman pro actor . jdk 文件 開源框架 優勢 一、 註入 a) set   i. JDK     1.八種基本類型(+包裝類)+String        <bean id="User" class="com.dsl.tes

Spring Cloud十四Config 配置中心與客戶端的使用與詳細

active html 提交 acl fail 出現 tee ini sdi 前言 在上一篇 文章 中我們直接用了本應在本文中配置的Config Server,對Config也有了一個基本的認識,即 Spring Cloud Config 是一種用來動態獲取Git、SVN、

spring IOC控制反轉及DI依賴註入

version bsp rds 編碼 軟件 martin framework 結果 -i 什麽是ioc(控制反轉)    IOC是一種設計思想,用來降低代碼與程序之間的耦合程度,把兩個直接相關的事物把直接相關的部分交給第三方作為中轉從而降低 了耦合性,方便後期維護。控制反轉

Spring Boot十一Redis整合從Docker安裝到分散式Session共享

一、簡介 Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API,Redis也是技術領域使用最為廣泛的儲存中介軟體,它是「Remote Dictionary Service」首字母縮寫,也就是「遠端字典服務」。 Red

Spring Boot十一Redis集成從Docker安裝到分布式Session共享

預覽 emca cati ive pid c語言 vat 訪問 ble 一、簡介 Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API,Redis也是技術領域使用最為廣泛的存儲中間件,它是「

Spring Boot十二單元測試JUnit

2.4 工具 num windows 地址 邏輯 分享圖片 enc 更正 一、介紹 JUnit是一款優秀的開源Java單元測試框架,也是目前使用率最高最流行的測試框架,開發工具Eclipse和IDEA對JUnit都有很好的支持,JUnit主要用於白盒測試和回歸測試。 白盒

談談對Spring IOC控制反轉的理解

學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spring Ioc的理解。

Spring MVC利用Hibernate Validator實現後端資料校驗

        吐槽一下,網上坑好多啊!不過採坑才能學習,寫bug能力-1。 JSR 303、JSR 349與Bean Validator         籠統來說,就是Java規定了一套關於驗證器的API,

Spring Boot Web 篇:配置 AOP 切面

目錄 AOP 簡介 AOP相關概念 AOP相關注解 編寫AOP 在pom.xml加入相關依賴 編寫切面類 頁面訪問(專案啟動) JoinPoint詳解 關於多個切面的執行順序 總結 原始碼下載 AOP 簡介 AOP相關概念 Tar

Spring Boot 測試篇:SpringBoot 測試

SpringBoot 測試 測試是對於一個CodeMonkey來說很重要的,也是必須要掌握的一項技能,凡事自測。 在pom.xml加入相關依賴 引入SpringBoot Test,這個預設新建 SpringBoot 專案就會自帶jar包。 編寫測試類 專案啟動

Spring Boot Web 篇:整合攔截器Interceptor

目錄 說在前面 在pom.xml加入相關依賴 定義攔截器 編寫攔截器 Interceptor 註冊攔截器 Interceptor 頁面訪問(專案啟動) 總結 原始碼下載 說在前面 Struts2(Interceptor篇):攔截器的實現

手寫spring事務註解版本

1.首先自定義一個事務註解(類似於@Transactional) package com.itmayiedu.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retentio

Spring Boot 基礎篇:建立一個簡單的SpringBoot專案

Spring Boot建立   首先IDEA新建一個專案,File-New-Project-Spring Initializr,然後Next,如下圖: 填寫專案資訊: 填寫專案使用到的技術,上面的SpringBoot版本建議選擇最新的穩定版,下面勾選上Web就可