0
0
SpringbootHow-ToBeginner · 4 min read

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 @Valid on the controller method parameter disables validation.
  • Not including BindingResult or Errors after @Valid means 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.validation dependency 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
  • @Min and @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.