In this tutorial, I am going to show you how to work with Spring Boot Validation framework.
Technologies :
- SpringBoot_1.5.9.RELEASE
- spring-boot-thymeleaf
- Apache Tomcat Embed
- Java 8
Spring Boot Validation :
I am going to create a simple Spring Boot Login form using a thymeleaf template and validate username and passwords.
Project Structure :
Project Dependencies :
pom.xml
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.onlinetutorialspoint.springbootvalidation</groupId>
<artifactId>springbootvalidation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
Login Controller :
LoginController.java
package com.onlinetutorialspoint.login;
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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Controller
public class LoginController extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
}
@GetMapping("/")
public String showForm(LoginForm loginForm) {
return "login";
}
@PostMapping("/")
public String validateLoginInfo(Model model, @Valid LoginForm loginForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "login";
}
model.addAttribute("user", loginForm.getuserName());
return "home";
}
}
LoginForm.java
LoginForm.java
package com.onlinetutorialspoint.login;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class LoginForm {
@NotNull
@Size(min = 2, max = 30)
private String userName;
@NotNull
@Min(5)
private String password;
public String getuserName() {
return this.userName;
}
public void setuserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "LoginForm(UserName: " + this.userName + ", Password: " + this.password + ")";
}
}
Login.html
Login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Spring Boot Validation Login Form Example</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="login-form">
<form action="#" th:action="@{/}" th:object="${loginForm}"
method="post">
<h2 class="text-center">Sign in</h2>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span> <input
type="text" class="form-control" th:field="*{userName}"
placeholder="Username" />
</div>
<span class="red" th:if="${#fields.hasErrors('userName')}"
th:errors="*{userName}"></span>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock"></i></span> <input
type="password" class="form-control" th:field="*{password}"
placeholder="Password" />
</div>
<span class="red" th:if="${#fields.hasErrors('password')}"
th:errors="*{password}"></span>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary login-btn btn-block">Sign
in</button>
</div>
</form>
</div>
</body>
</html>
home.html
home.html
<html>
<head>
<meta charset="ISO-8859-1"/>
<title>Spring Boot Validation Home</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
</head>
<body>
<div class="alert alert-success">
<strong>Success!</strong> Hello <span th:text="${user}" /> !
</div>
</body>
</html>
Application.java
package com.onlinetutorialspoint.login;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Run Application :
Terminal
mvn spring-boot:run
Access: http://localhost:8080/
Success :
Error Validation :
Happy Learning 🙂