DEV Community

Er. Bhupendra
Er. Bhupendra

Posted on

@RequestBody in SpringBoot

@RequestBody ka kaam hota hai HTTP request ke body (usually JSON/XML) ko read karke usko Java object (DTO/model) me convert karna.

Spring isko HttpMessageConverter ke through karta hai (e.g., JSON ke liye Jackson).

Source: Spring @RequestBody docs/javadoc.

Citations: Spring Reference (annotated controllers) and @RequestBody javadoc.


@RequestBody kahan use hota hai?

Mostly in:

1) POST (create)

Client JSON bhejta hai body me.

@PostMapping
public CloudVendor create(@RequestBody CloudVendor vendor) {
  return service.create(vendor);
}
Enter fullscreen mode Exit fullscreen mode

Request:

POST /cloudvendors
Content-Type: application/json

{
  "vendorId": "v1",
  "vendorName": "AWS",
  "vendorAddress": "Address",
  "vendorPhone": "9999"
}
Enter fullscreen mode Exit fullscreen mode

2) PUT (full update) / PATCH (partial update)

@PutMapping("/{id}")
public CloudVendor update(@PathVariable String id, @RequestBody CloudVendor vendor) {
  return service.update(id, vendor);
}
Enter fullscreen mode Exit fullscreen mode

“Hamesha” use hota hai kya?

Nahi. @RequestBody sirf tab jab data request body se aa raha ho (JSON/XML).

Agar data URL me aa raha ho, to:

  • /cloudvendors/{id}@PathVariable
  • /cloudvendors?name=aws&page=0@RequestParam

Example:

@GetMapping("/{id}")
public CloudVendor get(@PathVariable String id) { ... }

@GetMapping
public List<CloudVendor> list(@RequestParam(required=false) String name) { ... }
Enter fullscreen mode Exit fullscreen mode

“@RequestBody kyu nahi kar sakte” (especially GET me)?

Technically kuch setups me GET ke saath body bheji ja sakti hai, but standard practice nahi hai aur intermediaries/proxies/servers often ignore/drop it.

HTTP spec: GET request body ka semantics defined nahi hai (isliye unreliable).

Citation: RFC 9110 (HTTP Semantics), GET section.

Isliye industry me:

  • GET: @PathVariable + @RequestParam
  • POST/PUT/PATCH: @RequestBody

“@RequestBody ke bina kyu kaam nahi karta?”

Agar client JSON body bhej raha hai aur tum parameter pe @RequestBody nahi lagate, to Spring usually usko body se bind nahi karega. Result:

  • fields null aa sakte hain, ya
  • 400/415 errors aa sakte hain depending on mapping/content-type.

Common issue: Content-Type: application/json na bhejna → 415 Unsupported Media Type mil sakta hai.


Exact place: method parameter pe

@RequestBody hamesha controller method ke parameter par lagta hai:

@PostMapping("/login")
public TokenResponse login(@RequestBody LoginRequest req) { ... }
Enter fullscreen mode Exit fullscreen mode

Optional body chahiye to:

@PostMapping("/something")
public void f(@RequestBody(required = false) Map<String,Object> body) { ... }
Enter fullscreen mode Exit fullscreen mode

Agar tum apna exact endpoint aur request (URL + JSON body) paste kar do, main bata dunga ki wahan @RequestBody chahiye ya @RequestParam/@PathVariable, aur kyun issue aa raha hai.

=======================================================

Aapka sawal bahut valid hai. @RequestBody ka use GET request mein kyun nahi karte aur iska sahi kaam kya hai, isse samajhna bahut zaroori hai.

1. @RequestBody ka asli kaam kya hai?

Jab client (Mobile app ya Browser) server ko bahut saara data ya poora ka poora object bhejna chahta hai, tab hum @RequestBody use karte hain.

Maan lijiye aapko ek naya CloudVendor register karna hai. Usme vendor ka naam, ID, address, phone number, email sab hoga. Ye sab kuch URL mein bhejenge toh URL bahut ganda aur lamba ho jayega. Isliye hum ye data JSON format mein "Body" ke andar bhejte hain.

2. Isse GET mein use kyun nahi karte? (Why not in GET?)

Industry standards aur HTTP protocols ke hisaab se:

  • GET Request sirf data mangane (fetch) ke liye hoti hai. Isme data URL ke zariye (@PathVariable ya @RequestParam) bhejna hi standard hai.
  • Technical taur pe kuch servers GET mein body allow kar dete hain, lekin browsers, firewalls, aur caching servers GET body ko reject ya ignore kar dete hain.
  • Agar aapko data filter karne ke liye 10-15 fields bhejni hi hain, toh log GET ki jagah POST use kar lete hain (halanki ye debate ka vishay hai, par safer hai).

3. @RequestBody ka use kahan aur kaise hota hai?

Iska use hamesha POST, PUT, aur PATCH methods mein hota hai.

Example 1: Naya Data Create Karne ke liye (POST)

Jab aapko database mein naya vendor save karna ho:

@PostMapping("/create")
public String createCloudVendor(@RequestBody CloudVendor cloudVendor) {
    // Spring apne aap JSON data ko CloudVendor object mein convert kar dega
    this.vendorService.save(cloudVendor); 
    return "Vendor Created Successfully!";
}
Enter fullscreen mode Exit fullscreen mode

Client (Postman) se aise data aayega:

{
    "vendorId": "C3",
    "vendorName": "Azure",
    "vendorAddress": "Redmond",
    "vendorPhoneNumber": "9999"
}
Enter fullscreen mode Exit fullscreen mode

Example 2: Data Update Karne ke liye (PUT)

Jab aapko existing data poora change karna ho:

@PutMapping("/update")
public String updateCloudVendor(@RequestBody CloudVendor cloudVendor) {
    this.vendorService.update(cloudVendor);
    return "Vendor Updated!";
}
Enter fullscreen mode Exit fullscreen mode

4. @PathVariable vs @RequestBody (Kahan kya use karein?)

Feature @PathVariable / @RequestParam @RequestBody
Location URL ke andar hota hai. Request ki Body (hidden) mein hota hai.
Data Type Sirf simple strings/numbers ke liye best hai. Complex Objects (JSON/XML) ke liye best hai.
Method Mostly GET aur DELETE mein. Mostly POST, PUT, PATCH mein.
Visibility URL mein sab dikhta hai (Not Secure for passwords). URL mein nahi dikhta (More Secure).

Industry mein Practice kaise karein?

Aap apne controller mein ye 3 basic things add karke practice kariye:

  1. GET (Use @PathVariable): Kisi ek ko dekhne ke liye.
  2. POST (Use @RequestBody): Naya data add karne ke liye.
  3. PUT (Use @RequestBody): Data ko update karne ke liye.
  4. DELETE (Use @PathVariable): Data delete karne ke liye.

Practice Task:
Apne CloudVendorAPIService mein ek @PostMapping wala method likhiye jo CloudVendor object ko input le aur usse return kare. Postman mein "Body" -> "raw" -> "JSON" select karke data bhej kar check kijiye.

Kya aapne Postman setup kiya hua hai check karne ke liye?

Top comments (0)