← 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 {};
}