Spring 3 MVC and JSR303 @Valid example
2015-10-10 00:00
190 查看
In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via
Note
Hibernate Validator is the reference implementation for JSR 303
In this tutorial, we show you how to integrate Hibernate validator with Spring MVC, via
Technologies used :
Spring 3.0.5.RELEASE
Hibernate Validator 4.2.0.Final
JDK 1.6
Eclipse 3.6
Maven 3
Note
Refer to this Hibernate validator documentation for detail explanation
You can override it easily, create a properties with “key” and message. To know which @annotation bind to which key, just debug it and view value inside “
File : messages.properties
File : SignUpForm.jsp
File : Done.jsp
URL : http://localhost:8080/SpringMVC/customer/signup – If you didn’t fill in the form and click on the “submit” button, your customized validation error messages will be displayed.
@Validannotation, if any JSR 303 validator framework on the classpath.
Note
Hibernate Validator is the reference implementation for JSR 303
In this tutorial, we show you how to integrate Hibernate validator with Spring MVC, via
@Validannotation, to perform bean validation in a HTML form.
Technologies used :
Spring 3.0.5.RELEASE
Hibernate Validator 4.2.0.Final
JDK 1.6
Eclipse 3.6
Maven 3
1. Project Dependencies
Hibernate validator is available at JBoss public repository.<repositories> <repository> <id>JBoss repository</id> <url>http://repository.jboss.org/nexus/content/groups/public/</url> </repository> </repositories> <properties> <spring.version>3.0.5.RELEASE</spring.version> </properties> <dependencies> <!-- Spring 3 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Hibernate Validator --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.2.0.Final</version> </dependency> </dependencies>
2. JSR303 Bean Validation
A simple POJO, annotated with Hibernate validator annotation.Note
Refer to this Hibernate validator documentation for detail explanation
package com.mkyong.common.model;import org.hibernate.validator.constraints.NotEmpty;import org.hibernate.validator.constraints.Range;public class Customer { @NotEmpty //make sure name is not empty String name; @Range(min = 1, max = 150) //age need between 1 and 150 int age; //getter and setter methods}
3. Controller + @Valid
For validation to work, just annotate the “JSR annotated model object” via@Valid. That’s all, other stuff is just a normal Spring MVC form handling.
package com.mkyong.common.controller;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.mkyong.common.model.Customer;@Controller @RequestMapping("/customer")public class SignUpController { @RequestMapping(value = "/signup", method = RequestMethod.POST) public String addCustomer(@Valid Customer customer, BindingResult result) { if (result.hasErrors()) { return "SignUpForm"; } else { return "Done"; } } @RequestMapping(method = RequestMethod.GET) public String displayCustomerForm(ModelMap model) { model.addAttribute("customer", new Customer()); return "SignUpForm"; }}
4. Error Message
By default, if validation failed.@NotEmptywill display “may not be empty”
@Rangewill display “must be between 1 and 150″
You can override it easily, create a properties with “key” and message. To know which @annotation bind to which key, just debug it and view value inside “
BindingResult result“. Normally, the key is “@Annotation Name.object.fieldname“.
File : messages.properties
NotEmpty.customer.name = Name is required!Range.customer.age = Age value must be between 1 and 150
5. mvc:annotation-driven
Enable “mvc:annotation-driven” to make Spring MVC supports JSR303 validator via
@Valid, and also bind your properties file.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="com.mkyong.common.controller" /> <!-- support JSR303 annotation if JSR 303 validation present on classpath --> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <!-- bind your messages.properties --> <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> <property name="basename" value="messages" /> </bean></beans>
6. JSP Pages
Last one, normal JSP page with Spring form tag library.File : SignUpForm.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><html><head><style>.error { color: #ff0000;}.errorblock { color: #000; background-color: #ffEEEE; border: 3px solid #ff0000; padding: 8px; margin: 16px;}</style></head><body> <h2>Customer SignUp Form - JSR303 @Valid example</h2> <form:form method="POST" commandName="customer" action="customer/signup"> <form:errors path="*" cssClass="errorblock" element="div" /> <table> <tr> <td>Customer Name :</td> <td><form:input path="name" /></td> <td><form:errors path="name" cssClass="error" /></td> </tr> <tr> <td>Customer Age :</td> <td><form:input path="age" /></td> <td><form:errors path="age" cssClass="error" /></td> </tr> <tr> <td colspan="3"><input type="submit" /></td> </tr> </table> </form:form></body></html>
File : Done.jsp
<html><body> <h2>Done</h2></body></html>
6. Demo
URL : http://localhost:8080/SpringMVC/customer – Customer form page, with 2 text boxes for name and age.URL : http://localhost:8080/SpringMVC/customer/signup – If you didn’t fill in the form and click on the “submit” button, your customized validation error messages will be displayed.
Download Source Code
http://www.mkyong.com/wp-content/uploads/2011/07/SpringMVC-Bean-Validation-JSR303-Example-2.zip相关文章推荐
- 推荐一个spring的demo网站
- java ReadWriteLock 锁
- Java内存溢出示例
- java.util.logging自定义打印日志
- Java内存结构
- eclipse进行Debug的时候,发出“java breakpoint unable to install breakpoint”错误
- 10.9JAVA学习
- svn与eclipse进行整合开发
- spring boot实战(第八篇)上下文的创建
- java正确显示出字母且单词长度大于4的
- java监控工具备忘
- 我的成长比价系列:java web开发过程中遇到的错误一:sql语句换行错误
- java 控制反转和依赖注入的理解
- 解决Spring注解无法注入静态变量的问题
- 项目中使用的spring 注解说明
- Spring 4支持的Java 8新特性一览
- java线程学习(七)—java线程转储与堆栈
- lintcode排序矩阵中的从小到大第k个数-401(Java版)
- win7下JDK环境变量配置
- 下划线分隔符_运算符及其优先级JAVA011-014