Use @Valid before the parameter to trigger validation.
Add validation annotations like @NotNull, @Size inside your DTO class.
Examples
This DTO class uses validation annotations to require a name and a valid email.
Spring Boot
public class UserDto {
@NotNull(message = "Name is required")
private String name;
@Email(message = "Email should be valid")
private String email;
// getters and setters
}
This controller method validates the incoming user data before processing.
Spring Boot
@PostMapping("/users")
public ResponseEntity<String> addUser(@RequestBody @Valid UserDto user) {
return ResponseEntity.ok("User is valid");
}
Sample Program
This Spring Boot controller defines a UserDto with validation rules. The addUser method checks the data sent in the request body. If the data is invalid, Spring Boot automatically returns an error response. If valid, it returns a success message.
Spring Boot
import jakarta.validation.Valid;
import jakarta.validation.constraints.*;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
@Validated
public class UserController {
public static class UserDto {
@NotNull(message = "Name is required")
@Size(min = 2, max = 30, message = "Name must be 2-30 characters")
private String name;
@Email(message = "Email should 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; }
}
@PostMapping("/users")
public ResponseEntity<String> addUser(@RequestBody @Valid UserDto user) {
return ResponseEntity.ok("User is valid: " + user.getName());
}
}
OutputSuccess
Important Notes
Spring Boot automatically returns 400 Bad Request if validation fails.
Customize error messages in your DTO annotations for clearer feedback.
Use @Validated on the controller class to enable validation support.
Summary
Request validation checks input data before using it.
Use @Valid and validation annotations in DTO classes.
Spring Boot handles errors automatically and returns helpful messages.
Practice
(1/5)
1. What is the main purpose of using @Valid annotation in Spring Boot request handling?
easy
A. To trigger validation of the incoming request data based on annotations in the DTO
B. To automatically log the request data for debugging
C. To convert the request body into a JSON string
D. To disable validation for the request parameters
Solution
Step 1: Understand the role of @Valid
The @Valid annotation tells Spring Boot to check the incoming data against validation rules defined in the DTO class.
Step 2: Identify what @Valid does not do
It does not log data, convert to JSON, or disable validation. Its sole purpose is to trigger validation.
Final Answer:
To trigger validation of the incoming request data based on annotations in the DTO -> Option A
Quick Check:
@Valid triggers validation [OK]
Hint: Remember: @Valid means 'check this data' [OK]
Common Mistakes:
Thinking @Valid logs or converts data
Confusing @Valid with JSON serialization
Assuming @Valid disables validation
2. Which of the following is the correct way to apply validation annotations in a Spring Boot DTO class?
easy
A. public class UserDTO {
@Valid
private String name;
}
B. public class UserDTO {
@RequestBody
private String name;
}
C. public class UserDTO {
@NotNull
private String name;
}
D. public class UserDTO {
@Autowired
private String name;
}
Solution
Step 1: Recognize validation annotations
Annotations like @NotNull are used on fields to define validation rules in DTO classes.
Step 2: Identify incorrect annotations
@Valid is used on method parameters, not fields; @RequestBody and @Autowired are unrelated to field validation.
Final Answer:
public class UserDTO {
@NotNull
private String name;
} -> Option C
Quick Check:
Use validation annotations like @NotNull on fields [OK]
Hint: Validation annotations go on fields, not on parameters [OK]
Common Mistakes:
Using @Valid on fields instead of method parameters
Confusing @RequestBody with validation
Applying @Autowired to DTO fields
3. Given the following DTO and controller method, what will happen if the client sends a request with an empty email field?
public class UserDTO {
@NotBlank
private String email;
// getters and setters
}
@PostMapping("/users")
public ResponseEntity<String> createUser(@Valid @RequestBody UserDTO user) {
return ResponseEntity.ok("User created");
}
medium
A. The request will be ignored silently
B. The request will succeed and return "User created"
C. The server will throw a NullPointerException
D. The request will fail validation and return a 400 Bad Request with an error message
Solution
Step 1: Understand @NotBlank validation
The @NotBlank annotation requires the field to be non-null and contain at least one non-whitespace character.
Step 2: Analyze the empty email input
An empty string fails @NotBlank validation, so Spring Boot will reject the request and return a 400 error with validation details.
Final Answer:
The request will fail validation and return a 400 Bad Request with an error message -> Option D
Expecting NullPointerException instead of validation error
Thinking server ignores invalid input
4. Identify the error in this Spring Boot controller method that uses request validation:
@PostMapping("/register")
public ResponseEntity<String> registerUser(@Valid UserDTO user) {
// method body
}
Assuming UserDTO has validation annotations.
medium
A. Missing @Valid annotation on the method parameter
B. Missing @RequestBody annotation on the method parameter
C. Method should return void instead of ResponseEntity
D. UserDTO should not have validation annotations
Solution
Step 1: Check parameter annotations for validation
To validate request body data, the parameter must be annotated with @RequestBody so Spring can deserialize JSON into the DTO.
Step 2: Confirm @Valid usage
While @Valid triggers validation, without @RequestBody the data won't be bound from the request body, so validation won't run.
Final Answer:
Missing @RequestBody annotation on the method parameter -> Option B
Quick Check:
Use @RequestBody to bind JSON, then @Valid to validate [OK]
Hint: Always use @RequestBody with @Valid for JSON validation [OK]
Common Mistakes:
Forgetting @RequestBody causes no data binding
Assuming @Valid alone binds data
Thinking return type affects validation
5. You want to validate a user registration request with fields username (not blank), age (minimum 18), and email (valid email format). Which combination of annotations in the DTO class is correct?
hard
A. public class UserDTO {
@NotBlank
private String username;
@Min(18)
private int age;
@Email
private String email;
}
B. public class UserDTO {
@NotNull
private String username;
@Max(18)
private int age;
@Pattern(regexp = ".*@.*")
private String email;
}
C. public class UserDTO {
@NotBlank
private String username;
@Min(18)
private String age;
@Email
private String email;
}
D. public class UserDTO {
@NotEmpty
private String username;
@Min(18)
private Integer age;
@Email
private String email;
}
Solution
Step 1: Validate username with @NotBlank
Username must not be null or empty, so @NotBlank is correct.
Step 2: Validate age with @Min(18) and correct type
Age must be at least 18 and an integer type; int with @Min(18) fits.
Step 3: Validate email format with @Email
@Email annotation checks for valid email format.
Final Answer:
public class UserDTO {
@NotBlank
private String username;
@Min(18)
private int age;
@Email
private String email;
} -> Option A
Quick Check:
Use @NotBlank, @Min(18), and @Email for these fields [OK]
Hint: Match annotation to field type and validation need [OK]
Common Mistakes:
Using @Max instead of @Min for age
Using String type for age with @Min
Using @NotNull instead of @NotBlank for username
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.