📖 Scenario: You are building a simple Spring Boot web application that accepts user data via HTTP POST requests.This is common when users submit forms on websites, like signing up or sending feedback.
🎯 Goal: Learn how to handle POST requests in Spring Boot using the @PostMapping annotation.You will create a controller that accepts user information sent in the request body and returns a confirmation message.
📋 What You'll Learn
Create a Spring Boot controller class named UserController
Define a POST endpoint at /users using @PostMapping
Create a simple User class with name and email fields
Accept a User object in the POST request body using @RequestBody
Return a confirmation string including the user's name
💡 Why This Matters
🌍 Real World
Handling POST requests is essential for web applications to receive data from users, such as form submissions, registrations, or feedback.
💼 Career
Knowing how to use @PostMapping and @RequestBody in Spring Boot is a fundamental skill for backend developers working with REST APIs.
Progress0 / 4 steps
1
Create the User class
Create a public class called User with two private String fields: name and email. Add public getters and setters for both fields.
Spring Boot
Hint
Think of User as a simple box holding two pieces of text: name and email. You need methods to get and set these values.
2
Create the UserController class with @RestController
Create a public class called UserController and annotate it with @RestController. This class will handle web requests.
Spring Boot
Hint
The @RestController annotation tells Spring Boot this class will handle HTTP requests and return data directly.
3
Add a POST endpoint with @PostMapping to accept User data
Inside UserController, create a public method called addUser that takes a User parameter annotated with @RequestBody. Annotate this method with @PostMapping("/users"). The method should return a String confirming the user's name was received.
Spring Boot
Hint
The @PostMapping annotation maps POST requests to this method. The @RequestBody tells Spring to convert the request's JSON into a User object.
4
Complete the controller with necessary imports and class structure
Ensure the UserController class includes all necessary imports: org.springframework.web.bind.annotation.RestController, org.springframework.web.bind.annotation.PostMapping, and org.springframework.web.bind.annotation.RequestBody. Confirm the class and method structure is correct and ready to handle POST requests.
Spring Boot
Hint
Double-check your imports and method return statement to ensure the controller works as expected.
Practice
(1/5)
1. What is the main purpose of the @PostMapping annotation in Spring Boot?
easy
A. To map HTTP PUT requests to a specific method
B. To map HTTP POST requests to a specific method
C. To map HTTP DELETE requests to a specific method
D. To map HTTP GET requests to a specific method
Solution
Step 1: Understand HTTP methods
HTTP POST is used to send data to the server, so a method handling POST requests must be mapped accordingly.
Step 2: Role of @PostMapping
@PostMapping specifically maps HTTP POST requests to a method in a Spring Boot controller.
Final Answer:
To map HTTP POST requests to a specific method -> Option B
Quick Check:
@PostMapping = POST request handler [OK]
Hint: POST requests use @PostMapping to connect URL and method [OK]
Common Mistakes:
Confusing @PostMapping with @GetMapping
Using @PostMapping for GET requests
Not understanding HTTP method differences
2. Which of the following is the correct syntax to create a POST endpoint in Spring Boot that accepts JSON data?
easy
A. @PostMapping("/submit")
public String submitData(String data) { return "Received"; }
B. @GetMapping("/submit")
public String submitData(@RequestBody String data) { return "Received"; }
C. @PostMapping("/submit")
public String submitData(@RequestBody String data) { return "Received"; }
D. @PostMapping("/submit")
public String submitData(@RequestParam String data) { return "Received"; }
Solution
Step 1: Identify correct annotation and parameter
The method must use @PostMapping to handle POST requests and @RequestBody to receive JSON data from the request body.
Step 2: Check each option
@PostMapping("/submit")
public String submitData(@RequestBody String data) { return "Received"; } uses @PostMapping and @RequestBody correctly. @GetMapping("/submit")
public String submitData(@RequestBody String data) { return "Received"; } uses @GetMapping which is wrong. @PostMapping("/submit")
public String submitData(String data) { return "Received"; } misses @RequestBody, so data won't be parsed from JSON. @PostMapping("/submit")
public String submitData(@RequestParam String data) { return "Received"; } uses @RequestParam which reads query parameters, not JSON body.
Final Answer:
@PostMapping("/submit")
public String submitData(@RequestBody String data) { return "Received"; } -> Option C
Quick Check:
@PostMapping + @RequestBody = correct syntax [OK]
Hint: Use @RequestBody to get JSON data in POST method [OK]
Common Mistakes:
Using @GetMapping instead of @PostMapping
Forgetting @RequestBody for JSON input
Using @RequestParam for JSON body data
3. Given the following Spring Boot controller method, what will be the output when a POST request with body "Hello" is sent to /greet?
@PostMapping("/greet")
public String greet(@RequestBody String name) {
return "Hi, " + name + "!";
}
medium
A. "Hi, Hello!"
B. "Hello"
C. "Hi, name!"
D. HTTP 404 Not Found
Solution
Step 1: Understand method behavior
The method takes the request body as a String parameter named 'name' and returns "Hi, " plus that name plus "!".
Step 2: Apply input to output
Input body is "Hello", so the output will be "Hi, Hello!".
Final Answer:
"Hi, Hello!" -> Option A
Quick Check:
Input "Hello" returns "Hi, Hello!" [OK]
Hint: Return greeting by concatenating input string [OK]
Common Mistakes:
Ignoring @RequestBody and expecting query param
Confusing output with input
Assuming endpoint is missing (404)
4. Identify the error in this Spring Boot POST method:
@PostMapping("/addUser")
public String addUser(String user) {
return "User " + user + " added";
}
medium
A. Method return type should be void
B. Incorrect HTTP method annotation, should be @GetMapping
C. Missing @PathVariable annotation
D. Missing @RequestBody annotation for 'user' parameter
Solution
Step 1: Check parameter binding
The method expects to receive data in the POST request body, so the parameter must be annotated with @RequestBody to bind JSON or raw data.
Step 2: Verify annotations
Without @RequestBody, Spring won't map the request body to the 'user' parameter, causing it to be null or empty.
Final Answer:
Missing @RequestBody annotation for 'user' parameter -> Option D
Quick Check:
POST body needs @RequestBody on parameter [OK]
Hint: Add @RequestBody to method parameter for POST data [OK]
Common Mistakes:
Forgetting @RequestBody on POST method parameters
Using @GetMapping for POST endpoints
Confusing @PathVariable with request body
5. You want to create a Spring Boot POST endpoint /register that accepts a JSON object with fields username and email, maps it to a Java record UserData(String username, String email), and returns a confirmation message. Which method signature correctly implements this?
hard
A. @PostMapping("/register")
public String registerUser(@RequestBody UserData user) {
return "User " + user.username() + " registered with email " + user.email();
}
B. @PostMapping("/register")
public String registerUser(UserData user) {
return "User " + user.username() + " registered";
}
C. @PostMapping("/register")
public String registerUser(@RequestParam UserData user) {
return "User " + user.username() + " registered";
}
D. @PostMapping("/register")
public String registerUser(@PathVariable UserData user) {
return "User " + user.username() + " registered";
}
Solution
Step 1: Understand data binding for POST JSON
To map JSON request body to a Java record, the parameter must be annotated with @RequestBody.
Step 2: Check each option
@PostMapping("/register")
public String registerUser(@RequestBody UserData user) {
return "User " + user.username() + " registered with email " + user.email();
} correctly uses @RequestBody with UserData record and accesses its fields. @PostMapping("/register")
public String registerUser(UserData user) {
return "User " + user.username() + " registered";
} misses @RequestBody, so mapping fails. Options C and D use @RequestParam and @PathVariable which are for query/path parameters, not JSON body.
Final Answer:
@PostMapping("/register")
public String registerUser(@RequestBody UserData user) {
return "User " + user.username() + " registered with email " + user.email();
} -> Option A
Quick Check:
@RequestBody + record parameter = correct POST JSON mapping [OK]
Hint: Use @RequestBody with record to map JSON POST data [OK]
Common Mistakes:
Omitting @RequestBody on complex objects
Using @RequestParam or @PathVariable for JSON body
Not accessing record fields correctly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.