🤝
Request & Response Design

Content Negotiation

Accept Header, Media Types
💡 Content negotiation, EK RESTAURANT WAITER ka "KYA AAP JSON YA XML, KISME PASAND karenge?" PUCHNA hai — CUSTOMER (CLIENT), APNI PREFERENCE (Accept HEADER) BATATA hai, aur KITCHEN (SERVER), USI FORMAT mein, DISH (RESPONSE) SERVE karta hai.

Content negotiation, EK MECHANISM hai, JISSE, SAME RESOURCE, DIFFERENT FORMATS (REPRESENTATIONS) mein, RETURN ho sakta hai, CLIENT ki PREFERENCE ke HISAAB SE. CLIENT, Accept HEADER SE, APNI PREFERRED FORMAT(S), BATATA hai (jaise Accept: application/json).

Spring Boot, AUTOMATICALLY, Accept HEADER ko, EXAMINE karके, APPROPRIATE HttpMessageConverter CHOOSE karta hai — AGAR, REQUESTED FORMAT, SUPPORT NAHI ki jaati, 406 Not Acceptable, RETURN hota hai. produces ATTRIBUTE (@GetMapping(produces = "application/json")) SE, EXPLICITLY, SPECIFIC FORMAT, MANDATE ki ja sakti hai.

@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ProductDto getProduct(@PathVariable Long id) {
    return productService.findById(id);
}

// consumes — SIRF EK SPECIFIC content-type wale requests, accept karna:
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ProductDto createProduct(@RequestBody ProductCreateDto dto) { }

// Client request:
// GET /api/products/1
// Accept: application/json   → 200, JSON response
// Accept: application/pdf    → 406 Not Acceptable (agar support NAHI hai)
🤝
Content negotiation, EK RESTAURANT WAITER ka "KYA AAP JSON YA XML, KISME PASAND karenge?" PUCHNA hai — CUSTOMER (CLIENT), APNI PREFERENCE (Accept HEADER) BATATA hai, aur KITCHEN (SERVER), USI FORMAT mein, DISH (RESPONSE) SERVE karta hai.
1 / 2
⚡ Quick Recap
  • Accept header (client) = client, kya format chahta hai, batata hai
  • produces = response format, consumes = accepted request format
  • Unsupported format request par, 406 Not Acceptable
Is page mein (2 subtopics)

Spring, MULTIPLE, HttpMessageConverters ki, EK LIST, MAINTAIN karta hai — HAR REQUEST/RESPONSE ke liye, Accept/Content-Type HEADERS ke, BASIS PAR, SAHI CONVERTER, CHOOSE kiya jaata hai. CUSTOM CONVERTERS bhi, ADD kiye ja sakte hain, NAYE, FORMATS SUPPORT karne ke liye.

💡Tip: WebMvcConfigurer.configureMessageConverters(), CUSTOM HttpMessageConverters, REGISTER karne ka, WAY hai.

Content-Type: application/json;charset=UTF-8 — CHARSET, EXPLICITLY, SPECIFY kiya ja sakta hai, ENSURE karne ke liye, KI, SPECIAL CHARACTERS (jaise, NON-ENGLISH TEXT), CORRECTLY, ENCODE/DECODE HOTE hain — UTF-8, MODERN, DEFAULT, STANDARD hai.

  • Content-Type header = REQUEST/RESPONSE body ka, ACTUAL format
  • UTF-8 = MODERN, default charset — special characters, SAHI se handle