Spring MVC Form Validation (With Annotations)
This post provides a simple example of a HTML form validation. It is based on the Spring MVC With Annotations example. The code is available on GitHub in the Spring-MVC-Form-Validation directory.
Data
For this example we will use a bean and JSR303 validation annotations:
public class MyUser {
@NotNull
@Size(min=1,max=20)
private String name;
@Min(0)
@Max(120)
private int age;
public MyUser(String name, int age) {
this.name = name;
this.age = age;
}
public MyUser() {
name = '';
age = 0;
}
// Setters & Getters
}
Pages
Our form will contain input elements, but also the possibility to display error messages:
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<%@ taglib prefix='form' uri='http://www.springframework.org/tags/form' %>
<!doctype html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>My User Form!</title>
</head>
<body>
<form:form method='post' action='myForm' commandName='myUser'>
<table>
<tr>
<td>Name: <font color='red'><form:errors path='name' /></font></td>
</tr>
<tr>
<td><form:input path='name' /></td>
</tr>
<tr>
<td>Age: <font color='red'><form:errors path='age' /></font></td>
</tr>
<tr>
<td><form:input path='age' /></td>
</tr>
<tr>
<td><input type='submit' value='Submit' /></td>
</tr>
</table>
</form:form>
</body>
</html>Our success page is:
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<%@taglib prefix='form' uri='http://www.springframework.org/tags/form'%>
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!doctype html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>Form Processed Successfully!</title>
</head>
<body>
Form processed for <c:out value='${myUser.name}' /> ! <br />
<a href='<c:url value='/'/>'>Home</a>
</body>
</html>Our home page:
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!doctype html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<title>Welcome !!!</title>
</head>
<body>
<h1>
Spring Form Validation !!!
</h1>
<a href='<c:url value='/myForm'/>'>Go to the form!</a>
</body>
</html>
Controller
Notice that we need to use
@ModelAttribute to make sure an instance of
MyUser is always available in the model. In the
validateForm(), we need to use
@ModelAttribute to move the content of the form to the
MyUser project.
@Controller
public class MyController {
@RequestMapping(value = '/')
public String home() {
return 'index';
}
@ModelAttribute('myUser')
public MyUser getLoginForm() {
return new MyUser();
}
@RequestMapping(value = '/myForm', method = RequestMethod.GET)
public String showForm(Map model) {
return 'myForm';
}
@RequestMapping(value = '/myForm', method = RequestMethod.POST)
public String validateForm(
@ModelAttribute('myUser') @Valid MyUser myUser,
BindingResult result, Map model) {
if (result.hasErrors()) {
return 'myForm';
}
model.put('myUser', myUser);
return 'success';
}
}
Maven Dependencies
We need the following dependencies. The Hibernate validator dependency is necessary to process JSR303 annotations:
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> <type>jar</type> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.0.Final</version> </dependency>
Running The Example
Once compiled, the example can be run with
mvn tomcat:run. Then, browse:
http://localhost:8383//spring-mvc-form-validation/.
If the end user enters invalid values, error messages will be displayed:
Reference: Spring MVC Form Validation (With Annotations) from our JCG partner Jerome Versrynge at the Technical Notes blog.






It really helped me. I was stuck with a problem and your code helped me to resolve it. Main thing is that your code is lucid and very helpful for biginners like me.
Thanks!