文档章节

Spring 3 MVC and JSR303 @Valid example

凯文加内特
 凯文加内特
发布于 2015/10/10 15:10
字数 710
阅读 127
收藏 0

In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via @Valid annotation, 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 @Valid annotation, to perform bean validation in a HTML form.

Technologies used :

  1. Spring 3.0.5.RELEASE

  2. Hibernate Validator 4.2.0.Final

  3. JDK 1.6

  4. Eclipse 3.6

  5. 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.

  1. @NotEmpty will display “may not be empty”

  2. @Range will 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.

Spring MVC JSR303 demo page

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.

Spring MVC JSR303 demo page - error message

Download Source Code

http://www.mkyong.com/wp-content/uploads/2011/07/SpringMVC-Bean-Validation-JSR303-Example-2.zip

本文转载自:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

共有 人打赏支持
凯文加内特
粉丝 333
博文 667
码字总数 87615
作品 0
青岛
后端工程师
Spring如何绑定请求参数或PathVariable参数绑定到对象,并做使用@Valid做JSR3

Spring如何绑定请求参数或PathVariable参数绑定到对象,并做使用@Valid做JSR303校验 问题描述 以前在Spring中只对@RequestBody映射的请求参数使用过@Valid做JSR303校验,RequestBody一般适用...

Tek_Eternal
2015/03/14
0
3
SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证

首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:s......

-wangming-
2015/05/17
0
0
spring mvc 采用 jsr303 bean validation 校验框架

这是一个规范,定义了一些元素来进行bean的数据校验,比如 你的model有一个 user.java ,里面有一个email,当用户注册时候要验证email是否合法。 一般做法是js前端校验,但是不安全,作为完整...

moz1q1
2014/10/31
0
0
如何使用SpringMVC进行数据校验

前言: SpringMVC数据校验采用JSR-303校验。 • Spring 4.0 拥有自己独立的数据校验框架,同时支持 JSR 303 标准的校验框架。 • Spring 在进行数据绑定时,可同时调用校验框架完成数据校 验...

帅得拖网速
2016/09/01
574
0
Spring MVC之@Valid校验

@Valid是使用hibernate validation的时候使用 @Validated 是Spring提供的注解,是@Valid的封装 看看下面的依赖就知道,Java的JSR303声明了这类接口,然后hibernate-validator对其进行了实现...

满小茂
2016/09/21
0
2

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
10
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部