@RestController Deep Dive
@RestController = @Controller + @ResponseBody — HAR METHOD ka RETURN VALUE, AUTOMATICALLY, JSON (YA XML) mein, SERIALIZE hoke, RESPONSE BODY mein, DIRECTLY, CHALA jaata hai — VIEW RESOLUTION (HTML TEMPLATE RENDERING) COMPLETELY, SKIP ho jaati hai.
Class-level @RequestMapping, EK COMMON BASE PATH DEFINE karta hai (jaise /api/products) — HAR METHOD ka MAPPING, ISKE RELATIVE hota hai. DEPENDENCY INJECTION (SERVICE LAYER), CONSTRUCTOR SE, INJECT hoती hai — CONTROLLER, THIN RAKHA jaata hai, BUSINESS LOGIC, SERVICE mein REHTI hai.
@RestController
@RequestMapping("/api/products")
public class ProductController {
private final ProductService productService;
public ProductController(ProductService productService) {
this.productService = productService;
}
@GetMapping
public List<ProductDto> getAllProducts() {
return productService.findAll(); // JSON array, AUTOMATICALLY serialize
}
@GetMapping("/{id}")
public ProductDto getProduct(@PathVariable Long id) {
return productService.findById(id);
}
}- @RestController = @Controller + @ResponseBody
- Return value, AUTOMATICALLY, JSON mein serialize hota hai
- Controller THIN rakho — business logic, Service layer mein
Spring, INTERNALLY, HttpMessageConverter INTERFACE ke, IMPLEMENTATIONS (jaise, MappingJackson2HttpMessageConverter) USE karta hai, JAVA OBJECTS ko, JSON mein, CONVERT karne ke liye — @ResponseBody, Spring ko, SIGNAL karta hai, KI, RETURN VALUE, EK VIEW NAME NAHI, BALKI, DIRECTLY, RESPONSE BODY hai.
MODERN Spring Boot CODE mein, CONTROLLERS, CONSTRUCTOR INJECTION USE karte hain (@Autowired, IMPLICIT hai, AGAR, EK HI CONSTRUCTOR hai) — TESTING mein, MOCK SERVICES, EASILY, PASS ki ja sakti hain, BINA, Spring CONTEXT, START kiye.
@RestController
public class ProductController {
private final ProductService service;
public ProductController(ProductService service) { // @Autowired implicit
this.service = service;
}
}