DEV Community

Sonali Gupta
Sonali Gupta

Posted on

@RequestParam vs @RequestBody

1) @RequestParam
Extracts small values from the URL (query string).

Eg:

@GetMapping("/search")
public String searchUser(@RequestParam String name) {
return "Searching for " + name;
}

*Call: *
GET /search?name=sonali

name=sonali → comes from URL
No JSON involved

When to use?
Use @RequestParam when:
• Filtering / searching
• Pagination (page=1&size=10)
• Sorting (sort=name)
• Simple values only

If you're sending multiple fields, @RequestParam becomes messy:
/users?name=sonali&email=a@gmail.com&age=21
That’s a bad API design beyond small cases.

2)@RequestBody
Converts JSON request body → Java object.
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return user;
}

Call: POST /users
Body:
{
"name": "Sonali",
"email": "sonali@gmail.com"
}
JSON → mapped to User object
Happens automatically via Spring

When to use?

Use @RequestBody when:

Creating data (POST)
Updating data (PUT)
Sending structured data (objects)

Combine both (real-world usage)
@PostMapping("/users")
public String createUser(
@RequestParam String role,
@RequestBody User user) {

return user.getName() + " is " + role;
Enter fullscreen mode Exit fullscreen mode

}
Call:POST /users?role=admin
Body:
{
"name": "Sonali",
"email": "a@gmail.com"
}

Top comments (0)