DEV Community

Er. Bhupendra
Er. Bhupendra

Posted on

POST ALL USES IN BRINGBOOT

Industry mein POST API banane ka maqsad hota hai database mein naya data "Create" karna. Ise likhne ke 3 bade tareeqe hain, jo aapko practice karne chahiye.

Sabse pehle, Postman mein Body -> raw -> JSON select karke data bheja jata hai.


Method 1: Basic Way (Beginners ke liye)

Ye sabse simple tareeqa hai, lekin industry mein isse thoda avoid kiya jata hai kyunki ye HTTP status code (jaise 201 Created) sahi se nahi bhejta.

@PostMapping
public String createVendor(@RequestBody CloudVendor cloudVendor) {
    // Yahan hum service layer ko call karte hain database me save karne ke liye
    // cloudVendorService.createVendor(cloudVendor);
    return "Cloud Vendor Created Successfully";
}
Enter fullscreen mode Exit fullscreen mode

Method 2: Professional Way (Industry Standard)

Industry mein hum hamesha ResponseEntity return karte hain. Iska fayda ye hai ki hum batate hain ki resource "201 Created" ho gaya hai, na ki sirf "200 OK".

@PostMapping
public ResponseEntity<Object> createVendor(@RequestBody CloudVendor cloudVendor) {
    // Logic to save data
    // cloudVendorService.createVendor(cloudVendor);

    return new ResponseEntity<>("Vendor created successfully", HttpStatus.CREATED);
}
Enter fullscreen mode Exit fullscreen mode

Method 3: Handling Multiple Post Requests (Specific URLs)

Agar aapki ek hi controller mein do tarah ki POST requests hain, toh aap path define karte hain.

@PostMapping("/register")
public String registerVendor(@RequestBody CloudVendor vendor) {
    return "Vendor Registered";
}

@PostMapping("/bulk-upload")
public String uploadMultiple(@RequestBody List<CloudVendor> vendors) {
    return "All Vendors Saved";
}
Enter fullscreen mode Exit fullscreen mode

POST API likhte waqt kin baaton ka dhyan rakhna chahiye? (Best Practices)

1. @RequestBody ka hona zaroori hai

Agar aap @RequestBody bhool gaye, toh Spring ko pata nahi chalega ki JSON data ko CloudVendor object mein kaise badalna hai. Aapka object null aayega.

2. Sahi HTTP Status Code (201 Created)

GET ke liye 200 OK chalta hai, lekin POST (Creation) ke liye hamesha HttpStatus.CREATED (201) use karna chahiye.

3. Data Validation (Sabse Important)

Industry mein bina check kiye data save nahi karte. Aapko @Valid annotation ka use karna chahiye (Iske liye spring-boot-starter-validation dependency lagti hai).

  • Kya Vendor Name khali toh nahi?
  • Kya Vendor ID null toh nahi?

Example with Validation:

@PostMapping
public ResponseEntity<String> createVendor(@Valid @RequestBody CloudVendor vendor) {
    if(vendor.getVendorId() == null) {
        return new ResponseEntity<>("ID cannot be null", HttpStatus.BAD_REQUEST);
    }
    return new ResponseEntity<>("Success", HttpStatus.CREATED);
}
Enter fullscreen mode Exit fullscreen mode

4. Response Pattern

Hamesha koshish karein ki return mein sirf String na bhej kar, ya toh pura Object bhej dein jo save hua hai, ya fir ek Success Message Object bhejein.

5. Idempotency (Dhyan rakhein)

POST request "Idempotent" nahi hoti. Iska matlab hai agar aap ek hi data ko 2 baar POST karenge, toh database mein 2 alag records ban jayenge (Duplicate). Isliye service layer mein hamesha check karein ki wo ID pehle se toh nahi hai.


Practice Task:

Aap ye code apne project mein likhiye aur Postman se check kijiye:

  1. URL: http://localhost:8080/cloudvendor
  2. Method: POST
  3. Body (raw JSON):
{
    "vendorId": "C101",
    "vendorName": "Google Cloud",
    "vendorAddress": "USA",
    "vendorPhoneNumber": "88888"
}
Enter fullscreen mode Exit fullscreen mode

Sawal: Kya aapne apne CloudVendor model class mein Default Constructor (bin arguments wala constructor) banaya hai? Agar nahi, toh @RequestBody kaam nahi karega, kyunki Spring Jackson library ko object banane ke liye default constructor chahiye hota hai.

Top comments (0)