@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.
- https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods.html
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestBody.html
@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);
}
Request:
POST /cloudvendors
Content-Type: application/json
{
"vendorId": "v1",
"vendorName": "AWS",
"vendorAddress": "Address",
"vendorPhone": "9999"
}
2) PUT (full update) / PATCH (partial update)
@PutMapping("/{id}")
public CloudVendor update(@PathVariable String id, @RequestBody CloudVendor vendor) {
return service.update(id, vendor);
}
“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) { ... }
“@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
nullaa 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) { ... }
Optional body chahiye to:
@PostMapping("/something")
public void f(@RequestBody(required = false) Map<String,Object> body) { ... }
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 (
@PathVariableya@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!";
}
Client (Postman) se aise data aayega:
{
"vendorId": "C3",
"vendorName": "Azure",
"vendorAddress": "Redmond",
"vendorPhoneNumber": "9999"
}
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!";
}
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:
- GET (Use
@PathVariable): Kisi ek ko dekhne ke liye. - POST (Use
@RequestBody): Naya data add karne ke liye. - PUT (Use
@RequestBody): Data ko update karne ke liye. - 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)