Hibernate validator example

This is an example of how to make use of Hibernate validator API. Hibernate validator can be used to validate data, which is a very important issue in every layer of an application. For example, validating is important when submitting HTML forms. Hibernate validator framework provides many annotations, that can be used to validate input fields of a form against constraints.

In order to check how hibernate validator works, we will make use of Spring-MVC to create a simple form page. Each field in the form has a validation constraint set by the annotations provided by the Hidernate validator package.
 
 
 

Want to be a Hibernate Master ?
Subscribe to our newsletter and download the Hibernate Ultimate Guide right now!
In order to help you master JPA and database programming with Hibernate, we have compiled a kick-ass guide with all the major Hibernate features and use cases! Besides studying them online you may download the eBook in PDF format!

Thank you!

We will contact you soon.

Tip
You may skip project creation and jump directly to the beginning of the example below.

Our preferred development environment is Eclipse. We are using Eclipse Juno (4.2) version, along with Maven Integration plugin version 3.1.0. You can download Eclipse from here and Maven Plugin for Eclipse from here. The installation of Maven plugin for Eclipse is out of the scope of this tutorial and will not be discussed. We are also using JDK 7_u_21. Hibernate-validator 5.1.0 Final and Spring MVC are inserted as dependencies thruough Maven and Tomcat 7 is the application server.

Let’s begin,

1. Create a new Maven project

Go to File -> Project ->Maven -> Maven Project.

New Maven Project – step 1

In the “Select project name and location” page of the wizard, make sure that “Create a simple project (skip archetype selection)” option is unchecked, hit “Next” to continue with default values.

New Maven project- step 2

Here the maven archetype for creating a web application must be added. Click on “Add Archetype” and add the archetype. Set the “Archetype Group Id” variable to "org.apache.maven.archetypes", the “Archetype artifact Id” variable to "maven-archetype-webapp" and the “Archetype Version” to "1.0". Click on “OK” to continue.

Add Maven archetype

In the “Enter an artifact id” page of the wizard, you can define the name and main package of your project. Set the “Group Id” variable to "com.javacodegeeks.snippets.enterprise" and the “Artifact Id” variable to "springexample". The aforementioned selections compose the main project package as "com.javacodegeeks.snippets.enterprise.springexample" and the project name as "springexample". Set the “Package” variable to "war", so that a war file will be created to be deployed to tomcat server. Hit “Finish” to exit the wizard and to create your project.

Configure Maven project

The Maven project structure is shown below:

New project structure

2. Add dependencies

Add the dependencies in Maven’s pom.xml file, by editing it at the “Pom.xml” page of the POM editor. The dependencies needed are spring-webmvc package, the javax.validation and the hibernate-validator packages:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.javacodegeeks.snippets.enterprise</groupId>
	<artifactId>springexample</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>springexample Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>
		<dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
	</dependencies>
	<build>
		<finalName>springexample</finalName>
	</build>
	<properties>
		<spring.version>3.2.9.RELEASE</spring.version>
	</properties>
</project>

3. Create the model with the validation annotations

The Form.java class is a simple class with fields, that will be used as the MVC model. All the fields have annotations, so when the form is submitted all fields will be validated. The validation annotations used are the ones below:

Form.java

package com.javacodegeeks.snippets.enterprise.form.model;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
public class Form {
	
	@Size(min=5, max=10, message="Your name should be between 5 - 10 characters.")
	private String name;
	@Min(value=5, message="Please insert at least 5 characters")
	private String lastname;
	@NotNull(message="Please select a password")
	@Length(min=5, max=10, message="Password should be between 5 - 10 charactes")
	private String password;
	
	@Pattern(regexp="[0-9]+", message="Wrong zip!")
	private String zip;
	
	@Pattern(regexp=".+@.+\\..+", message="Wrong email!")
	private String email;
	
	@Range(min=18, message="You cannot subscribe if you are under 18 years old.")
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getLastname() {
		return lastname;
	}
	public void setLastname(String lastname) {
		this.lastname = lastname;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getZip() {
		return zip;
	}
	public void setZip(String zip) {
		this.zip = zip;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	
}

4. Create a controller

The Controller is where the DispatcherServlet will delegate requests. The @Controller annotation indicates that the class serves the role of a Controller. The @RequestMapping annotation is used to map a URL to either an entire class or a particular handler method.

The Controller consists of two basic methods, a GET method, which is String initForm(Model model) and a POST method, which is String submitForm(Model model, @Valid Form form, BindingResult result). The first method creates and returns to the "form" view a new instance of the Form.java class. The second method gets the Form object created in the form. Form is annotated with the @Valid annotation, which allows the form object to be validated with the validation annotations set in the Form.java class. BindingResult is where all validation errors are automatically passed, so it can be used to decide the next navigation step. If there are no errors, the validation is successful, so the method returns the String representation of the successForm.jsp page, and the form object is passed at the Model. Otherwise, the returned String is the String representation of the form.jsp page, which also has the error messages, as will be shown below.

FormController.java

package com.javacodegeeks.snippets.enterprise.form;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.javacodegeeks.snippets.enterprise.form.model.Form;
@Controller
@RequestMapping("/form.htm")
public class FormController {
	
	@RequestMapping(method = RequestMethod.GET)
	public String initForm(Model model) {
		Form form = new Form();
		model.addAttribute("form", form);
		return "form";
	}
	@RequestMapping(method = RequestMethod.POST)
	public String submitForm(@Valid Form form, BindingResult result) {
		String returnVal = "successForm";
		if(result.hasErrors()) {
			returnVal = "form";
		}
		return returnVal;
	}
}

5. Create a view

We make use of the form:form tag. Its method property is set to POST, and the commandName property is set to the name of the backing bean that is binded to the Model, which is the Form.java class.

The form:input tag is used to create all the input fields, with its path property set to every field binded to it. The form:errors tag defines where the error message of the specified field will be displayed in the view. Finally, the input tag, with type property set to submit is used for the submit button.

form.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>Spring MVC form submission</title>
</head>
<body>
	<h2>Fill your form!</h2>
	<form:form method="POST" commandName="form">
		<table>
			<tr>
				<td>Enter your name:</td>
				<td><form:input path="name" /></td>
				<td><form:errors path="name" cssStyle="color: #ff0000;"/></td>
			</tr>
			<tr>
				<td>Enter your lastname:</td>
				<td><form:input path="lastname" /></td>
				<td><form:errors path="lastname" cssStyle="color: #ff0000;" /></td>
			</tr>
			<tr>
				<td>Enter your password:</td>
				<td><form:input path="password" /></td>
				<td><form:errors path="password" cssStyle="color: #ff0000;" /></td>
			</tr>
			<tr>
				<td>Enter your zip:</td>
				<td><form:input path="zip" /></td>
				<td><form:errors path="zip" cssStyle="color: #ff0000;" /></td>
			</tr>
			<tr>
				<td>Enter your email:</td>
				<td><form:input path="email" /></td>
				<td><form:errors path="email" cssStyle="color: #ff0000;" /></td>
			</tr>
			<tr>
				<td>Enter your age:</td>
				<td><form:input path="age" /></td>
				<td><form:errors path="age" cssStyle="color: #ff0000;" /></td>
			</tr>
			<tr>
				<td><input type="submit" name="submit" value="Submit"></td>
			</tr>
			<tr>
		</table>
	</form:form>
</body>
</html>

When validation succeeds, the page below will be rendered:

successForm.jsp

<html>
<head>
<title>Spring MVC form submission</title>
</head>
<body>
Form successfully submitted.
</body>
</html>

6. Configure the application

The files that we must configure in the application are the web.xml file and the mvc-dispatcher-servlet.xml file. You can check how to configure these files in detail here.

7. Run the application

Now, let’s run the application. We first build the project with Maven and place the .war file produced in webapps folder of tomcat. Then, we can start the server.

Hit on:

http://localhost:8080/springexample/form.htm

Press the submit button before having entered any values:

failed validation

As a result all validation messages are rendered. Now complete your form correctly and press on submit button:

successful validation

The form is submitted sucessfully.

8. Download the Eclipse Project

This was an example of how to use Hibernate for validation.

Download
You can download the full source code of this example here: HibernateValidatorExample
Exit mobile version