Spring Boot – Validation using Hibernate Validator (original) (raw)

Last Updated : 27 Apr, 2026

Validating user input is essential for building secure and reliable applications. Spring Boot simplifies validation by using Hibernate Validator, allowing developers to apply rules using simple annotations.

Common Hibernate Validator Annotations

Hibernate validators provide the following annotations that are very helpful for software development.

Steps to Implement Validations

Below are the steps of Implementation to use Validation in Hibernate

**Step 1: Create the project

Use Spring Initializr (or your IDE’s wizard):

Java 17+ is recommended for Spring Boot 3.x.

Step 2: Project structure

Once when the project open in Eclipse Ide the project Structure is looks like as below

Project structure

Step 3: Create an Entity Class

Let’s create an entity class GeekEmployee with validation annotations applied to its fields.

**GeekEmployee.java

Java `

package com.gfg.samplehibernatevalidator;

import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import java.util.List;

public class GeekEmployee {

@NotBlank(message = "Employee name cannot be blank")
private String geekEmployeeName;

@Email(message = "Email should be valid")
private String geekEmailId;

@Min(value = 10000, message = "Salary must be at least 10,000")
private double salary;

@NotEmpty(message = "Qualifications cannot be empty")
private List<String> qualifications;

// Getters and Setters
public String getGeekEmployeeName() {
    return geekEmployeeName;
}

public void setGeekEmployeeName(String geekEmployeeName) {
    this.geekEmployeeName = geekEmployeeName;
}

public String getGeekEmailId() {
    return geekEmailId;
}

public void setGeekEmailId(String geekEmailId) {
    this.geekEmailId = geekEmailId;
}

public double getSalary() {
    return salary;
}

public void setSalary(double salary) {
    this.salary = salary;
}

public List<String> getQualifications() {
    return qualifications;
}

public void setQualifications(List<String> qualifications) {
    this.qualifications = qualifications;
}

}

`

**Explanation: This class defines an employee model in Java with validation rules (like non-empty name, valid email, minimum salary, and required qualifications) using Jakarta Bean Validation annotations.

Step 4: Exception handling for Validators Errors

When validation fails, Spring Boot throws a MethodArgumentNotValidException. We can handle this exception globally using @ControllerAdvice and return a structured error response.

**GlobalExceptionHandler.java

Java `

package com.gfg.samplehibernatevalidator;

import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler;

import java.util.HashMap; import java.util.Map;

@ControllerAdvice public class ExceptionHandler {

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
    Map<String, String> errors = new HashMap<>();

    ex.getBindingResult().getFieldErrors().forEach(error ->
            errors.put(error.getField(), error.getDefaultMessage()));

    return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}

}

`

**Explanation: This global exception handler catches validation errors and returns a structured response with field-wise error messages and a 400 (Bad Request) status.

Let us try to save the geek employees by accepting the inputs like "geekEmployeeName", "salary", "geekEmailId" and "qualifications". We need a rest controller file to achieve the same.

Step 5: REST Controller for Validation

Let’s create a REST controller to test the validation.

**GeekEmployeeController.java

Java `

package com.gfg.samplehibernatevalidator;

import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*;

@RestController @RequestMapping("/geek") public class GeekEmployeeController {

@PostMapping("/addEmployee")
public ResponseEntity<String> addEmployee(@Valid @RequestBody GeekEmployee employee) {
    return new ResponseEntity<>(
            "Employee details are valid and added successfully! \n" +
            "Name: " + employee.getGeekEmployeeName() + "\n" +
            "Email: " + employee.getGeekEmailId() + "\n" +
            "Salary: " + employee.getSalary() + "\n" +
            "Qualifications: " + employee.getQualifications(),
            HttpStatus.CREATED
    );
}

}

`

Explanation: This REST controller validates incoming employee data using @Valid and returns a success response with the employee details if all validations pass.

@Valid: This annotation triggers validation on the Employee object.
Response: If validation passes, the employee object is returned with a 201 CREATED status.

Step 6: Running the Application

Open main class and Run the Spring Boot application using the following command

mvn spring-boot:run

**Main Class: ValidationApplication.java

Java `

package com.gfg.samplehibernatevalidator;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication public class ValidationApplication {

public static void main(String[] args) {
    SpringApplication.run(ValidationApplication.class, args);
}

}

`

**Note: To run application using IDE goto main method in Spring Boot Application class and run the main method.

On running the application, in the console, we can see as following

Running th Application in the console

**Explanation: This log shows a Spring Boot application successfully starting, initializing the embedded Tomcat server, and running on port 8080 without errors.

Step 7: Test Application (Postman or curl).

Let's check the working part by using the Postman client as we are using post-mapping

Output in POSTMAN

**Note: Hibernate Validator is used for server-side validation in Spring Boot applications. By adding the required dependency and using validation annotations (like @NotNull, @Email), it helps validate user input before processing the request.