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:

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

Image

5、参考

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

本文内容总结:Spring Validation(使用Hibernate Validator)

原文链接:https://www.cnblogs.com/afeng7882999/p/4300032.html

以上是 Spring Validation(使用Hibernate Validator) 的全部内容, 来源链接: utcz.com/z/296259.html

回到顶部