Using @RequestBody to Receive JSON Input in Spring Boot
📖 Scenario: You are building a simple Spring Boot web service that accepts user data in JSON format.This service will receive user details like name and age from a client application.
🎯 Goal: Create a Spring Boot controller that uses @RequestBody to accept JSON input and map it to a Java object.
📋 What You'll Learn
Create a Java class named User with fields name (String) and age (int).
Create a Spring Boot controller class named UserController.
Add a POST endpoint /users that accepts JSON input using @RequestBody mapped to User.
Return the received User object as the response.
💡 Why This Matters
🌍 Real World
APIs often receive data from clients in JSON format. Using @RequestBody in Spring Boot lets you easily convert that JSON into Java objects to work with.
💼 Career
Understanding how to accept and process JSON input is essential for backend developers working with REST APIs in Java and Spring Boot.
Progress0 / 4 steps
1
Create the User class
Create a Java class called User with two private fields: name of type String and age of type int. Add public getters and setters for both fields.
Spring Boot
Hint
Think of User as a box that holds name and age. You need methods to put values in and take values out.
2
Create the UserController class
Create a Spring Boot controller class named UserController annotated with @RestController. Import necessary Spring annotations.
Spring Boot
Hint
Use @RestController to tell Spring this class handles web requests and returns data directly.
3
Add POST endpoint with @RequestBody
Inside UserController, add a method createUser annotated with @PostMapping("/users"). This method should accept a parameter annotated with @RequestBody of type User and return the same User object.
Spring Boot
Hint
The @RequestBody annotation tells Spring to convert JSON from the request into a User object.
4
Complete the controller and test
Ensure the UserController class is complete with the createUser method returning the User object. This completes the setup to accept JSON input and respond with the same data.
Spring Boot
Hint
Returning the User object sends the same data back as JSON response.
Practice
(1/5)
1. What is the main purpose of the @RequestBody annotation in a Spring Boot controller?
easy
A. To validate form data submitted via GET requests
B. To send JSON data back in the HTTP response
C. To map URL query parameters to method arguments
D. To automatically convert JSON from the HTTP request body into a Java object
Solution
Step 1: Understand the role of @RequestBody
@RequestBody tells Spring Boot to take JSON data sent in the HTTP request body and convert it into a Java object automatically.
Step 2: Differentiate from other annotations
It does not handle response data (that's @ResponseBody), nor does it map query parameters or validate GET form data.
Final Answer:
To automatically convert JSON from the HTTP request body into a Java object -> Option D
Quick Check:
@RequestBody = JSON to Java object [OK]
Hint: Remember: @RequestBody reads JSON input from request body [OK]
Common Mistakes:
Confusing @RequestBody with @ResponseBody
Thinking it maps URL parameters
Assuming it validates data automatically
2. Which of the following method signatures correctly uses @RequestBody to accept a JSON object representing a User in a Spring Boot controller?
easy
A. public ResponseEntity<String> addUser(@RequestBody User user)
B. public ResponseEntity<String> addUser(@RequestParam User user)
C. public ResponseEntity<String> addUser(@PathVariable User user)
D. public ResponseEntity<String> addUser(User user)
Solution
Step 1: Identify correct annotation for JSON body
@RequestBody is required to tell Spring Boot to convert JSON in the request body to a User object.
Step 2: Check other annotations
@RequestParam reads query parameters, @PathVariable reads URL path segments, and no annotation means no automatic JSON conversion.
Final Answer:
public ResponseEntity<String> addUser(@RequestBody User user) -> Option A
Quick Check:
JSON input needs @RequestBody [OK]
Hint: Use @RequestBody for JSON input, not @RequestParam or @PathVariable [OK]
Common Mistakes:
Using @RequestParam instead of @RequestBody
Forgetting @RequestBody annotation
Confusing @PathVariable with JSON input
3. Given the following controller method:
@PostMapping("/add")
public String addUser(@RequestBody User user) {
return "Hello " + user.getName();
}
And the JSON sent in the request body is:
{"name": "Alice"}
What will be the response?
medium
A. HTTP 400 Bad Request
B. "Hello null"
C. "Hello Alice"
D. Compilation error
Solution
Step 1: Understand JSON to Java object mapping
The JSON {"name": "Alice"} maps to a User object with name set to "Alice".
Step 2: Check method return value
The method returns "Hello " + user.getName(), so it returns "Hello Alice".
Final Answer:
"Hello Alice" -> Option C
Quick Check:
JSON name maps to user.getName() = "Hello Alice" [OK]
Hint: JSON keys map to object fields, so output uses those values [OK]
Common Mistakes:
Assuming user.getName() is null
Expecting HTTP error without malformed JSON
Confusing request body with query parameters
4. Consider this controller method:
@PostMapping("/user")
public String createUser(@RequestBody User user) {
return user.getEmail();
}
If the client sends an empty request body, what will happen?
medium
A. Spring Boot throws an HTTP 400 Bad Request error
B. The method returns null
C. The method returns an empty string
D. Compilation error due to missing @RequestBody
Solution
Step 1: Check behavior with empty JSON body
When @RequestBody expects JSON but receives empty body, Spring Boot cannot create the User object.
Step 2: Understand Spring Boot error handling
Spring Boot responds with HTTP 400 Bad Request for missing or malformed JSON input.
Final Answer:
Spring Boot throws an HTTP 400 Bad Request error -> Option A
Quick Check:
Empty JSON body causes HTTP 400 error [OK]
Hint: Empty JSON body with @RequestBody causes HTTP 400 error [OK]
Common Mistakes:
Assuming method returns null or empty string
Thinking compilation error occurs
Ignoring HTTP error on missing JSON
5. You want to create a Spring Boot REST endpoint that accepts a JSON array of User objects in the request body and returns the count of users received. Which method signature correctly uses @RequestBody to achieve this?
hard
A. public int countUsers(@RequestBody User user)
B. public int countUsers(@RequestBody List<User> users)
C. public int countUsers(@RequestParam List<User> users)
D. public int countUsers(@PathVariable List<User> users)
Solution
Step 1: Identify correct parameter type for JSON array
To accept a JSON array of User objects, the method parameter should be a List<User> annotated with @RequestBody.
Step 2: Exclude incorrect annotations and types
@RequestParam and @PathVariable do not handle JSON body. Single User parameter cannot accept an array.
Final Answer:
public int countUsers(@RequestBody List<User> users) -> Option B
Quick Check:
JSON array maps to List<User> with @RequestBody [OK]
Hint: Use List<User> with @RequestBody for JSON arrays [OK]
Common Mistakes:
Using single User instead of List<User>
Using @RequestParam or @PathVariable for JSON body
Forgetting @RequestBody annotation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.