Content Negotiation
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)- Accept header (client) = client, kya format chahta hai, batata hai
- produces = response format, consumes = accepted request format
- Unsupported format request par, 406 Not Acceptable
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.
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