Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the purpose of the @Valid annotation in Spring Boot?
The <code>@Valid</code> annotation is used to tell Spring Boot to check the data in the request body against the validation rules defined in the model class before processing it.
Click to reveal answer
beginner
Where do you place the @Valid annotation in a Spring Boot controller method?
You place @Valid right before the request body parameter in the controller method, for example: public ResponseEntity method(@Valid @RequestBody MyModel model).
Click to reveal answer
intermediate
What happens if the request body fails validation when using @Valid?
Spring Boot automatically returns a 400 Bad Request response with details about which validation rules failed, preventing the controller method from running.
Click to reveal answer
intermediate
Which Java package provides the validation annotations used with @Valid?
The validation annotations like @NotNull, @Size, and @Email come from the jakarta.validation.constraints package.
Click to reveal answer
intermediate
How can you customize the error messages shown when validation fails with @Valid?
You can add a message attribute to each validation annotation, for example: @NotNull(message = "Name is required") to show a friendly message.
Click to reveal answer
What does the @Valid annotation do in a Spring Boot controller?
ALogs the request body content
BConverts the request body to JSON
CEncrypts the request body data
DValidates the request body data against model rules
✗ Incorrect
@Valid triggers validation of the request body data before the controller processes it.
Where should @Valid be placed in a controller method?
ABefore the method name
BBefore the request body parameter
CAfter the return type
DOn the class declaration
✗ Incorrect
@Valid goes right before the parameter annotated with @RequestBody.
Which HTTP status code does Spring Boot return if validation fails with @Valid?
A400 Bad Request
B500 Internal Server Error
C404 Not Found
D200 OK
✗ Incorrect
Validation failure results in a 400 Bad Request response.
Which package provides annotations like @NotNull used with @Valid?
Aorg.springframework.web.bind.annotation
Bjava.util
Cjakarta.validation.constraints
Djava.lang
✗ Incorrect
Validation annotations come from jakarta.validation.constraints.
How can you provide a custom error message for a validation rule?
ABy setting <code>message</code> attribute in the validation annotation
BBy overriding the controller method
CBy changing the HTTP status code
DBy adding <code>@CustomMessage</code> annotation
✗ Incorrect
Custom messages are set using the message attribute inside validation annotations.
Explain how the @Valid annotation works on a request body in Spring Boot and what happens when validation fails.
Think about how Spring Boot checks data before running your code.
You got /4 concepts.
Describe how to customize validation error messages when using @Valid in Spring Boot.
Focus on how to make validation feedback clearer.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of using the @Valid annotation on a @RequestBody parameter in a Spring Boot controller?
easy
A. To automatically check if the incoming request data meets the validation rules defined in the data class.
B. To convert the request body into a JSON string.
C. To log the request body content for debugging.
D. To cache the request body for faster access.
Solution
Step 1: Understand the role of @Valid
The @Valid annotation triggers validation of the request body object based on constraints defined in its class.
Step 2: Connect validation to request handling
When placed before @RequestBody, it ensures the data is checked before the controller method uses it.
Final Answer:
To automatically check if the incoming request data meets the validation rules defined in the data class. -> Option A
Quick Check:
@Valid validates input data [OK]
Hint: Remember: @Valid checks data correctness before method runs [OK]
Common Mistakes:
Thinking @Valid converts or logs data
Placing @Valid after @RequestBody
Assuming @Valid caches data
2. Which of the following is the correct way to use @Valid in a Spring Boot controller method parameter?
easy
A. public ResponseEntity create(@RequestBody User user @Valid) { ... }
B. public ResponseEntity create(@Valid User user @RequestBody) { ... }
C. public ResponseEntity create(@Valid @RequestBody User user) { ... }
D. public ResponseEntity create(User user @Valid @RequestBody) { ... }
Solution
Step 1: Recall annotation order for parameters
In Spring Boot, @Valid must come before @RequestBody on the same parameter.
Step 2: Check each option's syntax
Only public ResponseEntity create(@Valid @RequestBody User user) { ... } correctly places @Valid before @RequestBody on the parameter.
Final Answer:
public ResponseEntity create(@Valid @RequestBody User user) { ... } -> Option C
Quick Check:
Correct annotation order = public ResponseEntity create(@Valid @RequestBody User user) { ... } [OK]
Hint: Put @Valid before @RequestBody on the same parameter [OK]
Common Mistakes:
Placing @Valid after @RequestBody
Separating annotations incorrectly
Using @Valid without @RequestBody
3. Given the following controller method and data class, what happens when a POST request sends an empty JSON object {}?
public record User(@NotBlank String name, @Min(18) int age) {}
@PostMapping("/users")
public ResponseEntity<String> addUser(@Valid @RequestBody User user) {
return ResponseEntity.ok("User added");
}
medium
A. The request succeeds but 'age' defaults to 0.
B. The request succeeds and returns 'User added'.
C. The request fails because @Valid is ignored on records.
D. The request fails validation because 'name' is blank and 'age' is missing.
Solution
Step 1: Analyze validation constraints on User record
@NotBlank requires 'name' to be non-empty; @Min(18) requires 'age' to be at least 18.
Step 2: Consider empty JSON input effects
Empty JSON means 'name' and 'age' are missing, so validation fails for both fields.
Final Answer:
The request fails validation because 'name' is blank and 'age' is missing. -> Option D
Quick Check:
Missing required fields cause validation failure [OK]
Hint: Empty JSON fails @NotBlank and @Min validations [OK]
Common Mistakes:
Assuming missing fields pass validation
Thinking @Valid ignores records
Assuming default values apply automatically
4. You have this controller method:
@PostMapping("/register")
public ResponseEntity<String> registerUser(@RequestBody @Valid User user) {
return ResponseEntity.ok("Registered");
}
But when you send invalid data, no validation errors occur and the method runs normally. What is the most likely cause?
medium
A. Missing @Validated annotation on the controller class or configuration.
B. The User class does not have any validation annotations.
C. The @Valid annotation is placed after @RequestBody.
D. Spring Boot does not support validation on request bodies.
Solution
Step 1: Check if User class has validation rules
If the User class lacks validation annotations like @NotNull, @NotBlank, etc., @Valid has nothing to check.
Step 2: Understand validation behavior
Without constraints, validation passes silently, so the method runs normally even with invalid data.
Final Answer:
The User class does not have any validation annotations. -> Option B
Quick Check:
No constraints = no validation errors [OK]
Hint: Validation needs annotations in the data class [OK]
Common Mistakes:
Assuming @Validated is always required
Thinking annotation order causes no validation
Believing Spring Boot disables validation by default
5. You want to create a Spring Boot API that accepts a JSON request body for a Product with fields name (required, not blank) and price (required, positive number). Which of the following code snippets correctly applies @Valid and validation annotations to ensure invalid data is rejected automatically?
hard
A. public record Product(@NotBlank String name, @Positive double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@Valid @RequestBody Product product) {
return ResponseEntity.ok("Product added");
}
B. public class Product {
public String name;
public double price;
}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@RequestBody Product product) {
return ResponseEntity.ok("Product added");
}
C. public record Product(String name, double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@RequestBody @Valid Product product) {
return ResponseEntity.ok("Product added");
}
D. public record Product(@NotNull String name, @Min(1) double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@RequestBody Product product) {
return ResponseEntity.ok("Product added");
}
Solution
Step 1: Identify correct validation annotations
@NotBlank ensures 'name' is not empty; @Positive ensures 'price' is greater than zero.
Step 2: Check usage of @Valid and @RequestBody
public record Product(@NotBlank String name, @Positive double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@Valid @RequestBody Product product) {
return ResponseEntity.ok("Product added");
} correctly places @Valid before @RequestBody in the controller method parameter.
Step 3: Verify other options
public class Product {
public String name;
public double price;
}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@RequestBody Product product) {
return ResponseEntity.ok("Product added");
} lacks validation annotations and @Valid. public record Product(String name, double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@RequestBody @Valid Product product) {
return ResponseEntity.ok("Product added");
} misses validation annotations. public record Product(@NotNull String name, @Min(1) double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@RequestBody Product product) {
return ResponseEntity.ok("Product added");
} uses @Min(1) on a double (should use @Positive) and misses @Valid.
Final Answer:
public record Product(@NotBlank String name, @Positive double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@Valid @RequestBody Product product) {
return ResponseEntity.ok("Product added");
} -> Option A
Quick Check:
Use @Valid + proper annotations = public record Product(@NotBlank String name, @Positive double price) {}
@PostMapping("/products")
public ResponseEntity<String> addProduct(@Valid @RequestBody Product product) {
return ResponseEntity.ok("Product added");
} [OK]
Hint: Use @Valid + @NotBlank and @Positive for required fields [OK]