How to Validate Request in Spring Boot: Simple Guide
In Spring Boot, you validate requests by adding
@Valid to your controller method parameters and using validation annotations like @NotNull or @Size on your request data class fields. Spring Boot automatically checks the data and returns errors if validation fails.Syntax
Use @Valid on the request body parameter in your controller method to trigger validation. Annotate your data class fields with validation constraints like @NotNull, @Size, or @Email. Optionally, use BindingResult to handle validation results manually.
java
import jakarta.validation.constraints.*; import org.springframework.web.bind.annotation.*; import org.springframework.validation.BindingResult; import jakarta.validation.Valid; @RestController public class MyController { @PostMapping("/submit") public String submitData(@Valid @RequestBody MyRequest request, BindingResult result) { if (result.hasErrors()) { return "Validation failed"; } return "Validation passed"; } } class MyRequest { @NotNull(message = "Name cannot be null") @Size(min = 2, max = 30, message = "Name must be 2-30 characters") private String name; @Email(message = "Email should be valid") private String email; // getters and setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Example
This example shows a Spring Boot controller that validates a JSON request body. If the name is missing or too short, or the email is invalid, the server responds with an error message.
java
import jakarta.validation.constraints.*; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.*; import org.springframework.validation.BindingResult; import jakarta.validation.Valid; @SpringBootApplication @RestController public class ValidationExampleApp { public static void main(String[] args) { SpringApplication.run(ValidationExampleApp.class, args); } @PostMapping("/validate") public String validateRequest(@Valid @RequestBody UserRequest userRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "Validation errors: " + bindingResult.getAllErrors().get(0).getDefaultMessage(); } return "Request is valid for user: " + userRequest.getName(); } } class UserRequest { @NotNull(message = "Name is required") @Size(min = 3, max = 20, message = "Name must be between 3 and 20 characters") private String name; @Email(message = "Email must be valid") private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Output
Request is valid for user: Alice
Common Pitfalls
- Forgetting to add
@Validon the controller method parameter disables validation. - Not including
BindingResultorErrorsafter@Validmeans you cannot handle validation errors manually. - Missing getters and setters in the request class can cause deserialization or validation to fail silently.
- Using incompatible validation annotations or missing the
jakarta.validationdependency causes errors.
java
/* Wrong: Missing @Valid disables validation */ @PostMapping("/wrong") public String wrongValidation(@RequestBody UserRequest userRequest) { return "No validation done"; } /* Right: Add @Valid to enable validation */ @PostMapping("/right") public String rightValidation(@Valid @RequestBody UserRequest userRequest, BindingResult result) { if (result.hasErrors()) { return "Validation failed"; } return "Validation passed"; }
Quick Reference
Use these annotations to validate your request fields:
@NotNull: Field must not be null@Size(min, max): String length limits@Email: Valid email format@Minand@Max: Numeric range limits
Remember to add @Valid on the controller parameter and include BindingResult to check errors.
Key Takeaways
Add @Valid on controller method parameters to trigger validation.
Use validation annotations like @NotNull and @Size on request class fields.
Include BindingResult after @Valid to handle validation errors manually.
Ensure your request class has proper getters and setters for validation to work.
Add jakarta.validation dependency to your project for validation support.