Spring Validation(使用Hibernate Validator)

一、須要的jar包css

hibernate-validator.5.1.3.Final.jarhtml

validation-api.1.1.0.Final.jarjava

二、springsevlet-config.xml配置git

在spring3以後,任何支持JSR303的validator(如Hibernate Validator)均可以經過簡單配置引入,只須要在配置xml中加入,這時validatemessage的屬性文件默認爲classpath下的ValidationMessages.propertiesweb

<!-- 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>

 三、hibernate validator constraint 註解spring

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=)  被註釋的元素必須在合適的範圍內 

 四、使用validatorapi

在須要校驗的對象前增長@Valid 註解(該註解位於javax.validation包中)來觸發校驗。這樣就能夠完成針對輸入數據User對象的校驗了,校驗結果任然保存在BindingResult對象中。spring-mvc

 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「的形式:mvc

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

代碼運行Demo:

SpringMVC-Bean-Validation-JSR303-Example-2.zip

五、參考

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

http://www.cnblogs.com/myitmylife/p/3617084.html

http://www.cnblogs.com/liukemng/p/3738055.html

相關文章
相關標籤/搜索