📤
Request & Response Design

ResponseEntity Deep Dive

Status, Headers, Body Control
💡 ResponseEntity, EK COURIER PACKAGE hai, JISKA POORA CONTROL, TUMHARE HAATH mein hai — PACKAGE KA CONTENT (BODY), LABEL (STATUS CODE), aur EXTRA INSTRUCTIONS (HEADERS), SAB, EXPLICITLY, TUM DECIDE karte ho — SIRF EK PLAIN OBJECT RETURN karne SE, YE CONTROL NAHI MILТА.

ResponseEntity<T>, HTTP RESPONSE ka, FULL CONTROL DETA hai — STATUS CODE (200, 201, 404), HEADERS (CUSTOM HEADERS bhi ADD ki ja sakti hain), aur BODY — SAB, EXPLICITLY, SET kiye ja sakte hain. SIMPLE @GetMapping mein, SIRF OBJECT RETURN karne SE, DEFAULT 200 OK MILТА hai — LEKIN, PROPER REST SEMANTICS (201 for CREATE, 204 for DELETE) ke liye, ResponseEntity, ZAROORI hai.

ResponseEntity.ok(), ResponseEntity.status(HttpStatus.CREATED), ResponseEntity.noContent() jaise, CONVENIENT, STATIC METHODS, COMMON PATTERNS ke liye, AVAILABLE hain — MANUALLY, new ResponseEntity<>(...) LIKHNE ki, ZAROORAT KAM PADТI hai.

@PostMapping
public ResponseEntity<ProductDto> createProduct(@RequestBody @Valid ProductCreateDto dto) {
    Product created = productService.create(dto);
    URI location = URI.create("/api/products/" + created.getId());
    return ResponseEntity.created(location).body(toDto(created));   // 201 + Location header
}

@GetMapping("/{id}")
public ResponseEntity<ProductDto> getProduct(@PathVariable Long id) {
    return productService.findById(id)
        .map(product -> ResponseEntity.ok(toDto(product)))    // 200
        .orElse(ResponseEntity.notFound().build());             // 404
}

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {
    productService.delete(id);
    return ResponseEntity.noContent().build();   // 204, koi body nahi
}
📤
ResponseEntity, EK COURIER PACKAGE hai, JISKA POORA CONTROL, TUMHARE HAATH mein hai — PACKAGE KA CONTENT (BODY), LABEL (STATUS CODE), aur EXTRA INSTRUCTIONS (HEADERS), SAB, EXPLICITLY, TUM DECIDE karte ho — SIRF EK PLAIN OBJECT RETURN karne SE, YE CONTROL NAHI MILТА.
1 / 2
⚡ Quick Recap
  • ResponseEntity<T> = status code + headers + body, FULL control
  • Static methods (ok(), created(), noContent()) = common patterns, CONCISE syntax
  • created() = Location header, AUTOMATICALLY set hota hai
On this page (2 subtopics)

ResponseEntity.ok().header("X-Total-Count", "145").body(products) — CUSTOM HEADERS, RESPONSE mein, ADD kiye ja sakte hain, EXTRA METADATA (jaise, TOTAL COUNT, RATE LIMIT INFO) CLIENT ko, DENE ke liye, BINA, BODY STRUCTURE, MODIFY kiye.

return ResponseEntity.ok()
    .header("X-Total-Count", String.valueOf(total))
    .body(products);

ResponseEntity<Void>, USE hota hai, JAB, RESPONSE mein, KOI, BODY NAHI CHAHIYE (jaise, DELETE OPERATIONS ke liye, 204 No Content) — Void, TYPE PARAMETER, EXPLICITLY, BATATA hai, KI, YE METHOD, INTENTIONALLY, KOI, DATA, RETURN NAHI karta.

💡Tip: .build() METHOD, ResponseEntity, FINALIZE karta hai, JAB, BODY, SET karne ki, ZAROORAT NAHI hai — ResponseEntity.noContent().build() jaisa.