Spring Boot Components Hub

← Back to Home

Spring Boot Validation

Spring Boot Validation provides bean validation capabilities using the Bean Validation API (JSR-303/JSR-380). It allows you to validate input data declaratively using annotations, ensuring data integrity and reducing boilerplate validation code throughout your application.

Key Features

Annotation-Based

Use annotations like @NotNull, @Size, @Email, @Min, @Max to validate fields declaratively.

Method Validation

Validate method parameters and return values using @Validated annotation.

Custom Validators

Create custom validation annotations and validators for complex validation rules.

Automatic Integration

Automatic validation in Spring MVC controllers with @Valid annotation.

Use Cases

  • Input Validation: Validating user input in REST API endpoints
  • Form Validation: Validating form data before processing
  • Data Integrity: Ensuring data meets business rules before persistence
  • API Contracts: Enforcing API contracts and data formats
  • Business Rules: Implementing business validation rules declaratively

Example Usage

Define validation constraints on entity:

public class User {
    
    @NotNull(message = "Name is required")
    @Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
    private String name;
    
    @NotNull(message = "Email is required")
    @Email(message = "Email should be valid")
    private String email;
    
    @Min(value = 18, message = "Age must be at least 18")
    @Max(value = 120, message = "Age must be at most 120")
    private Integer age;
}

Validate in controller:

@RestController
@RequestMapping("/api/users")
public class UserController {
    
    @PostMapping
    public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
        // Validation happens automatically
        User saved = userService.save(user);
        return ResponseEntity.ok(saved);
    }
}

Dependencies

Add the following dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Custom Validator

Create custom validation:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface ValidPhoneNumber {
    String message() default "Invalid phone number";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}