@Controller Vs @RestController
π @Controller
β Purpose:
Used to serve web pages (like JSP/Thymeleaf/HTML) β it returns views.
π¦ Common Use Case:
π Key Points:
| Feature | Value |
|---|---|
| Returns | View names (String) |
| Used With | Thymeleaf, JSP, etc. |
| Response Body | Not returned by default |
| Extra Required | Use @ResponseBody to return data instead |
π @RestController
β Purpose:
Used for REST APIs β it returns JSON or XML response directly to the client.
π¦ Common Use Case:
π Key Points:
@RestController
public class ApiController {
Β Β @GetMapping("/api/greet")
Β Β public String greet() {
Β Β Β Β return "Hello from API"; // Returns raw string or JSON
Β Β }
}
π Side-by-Side Comparison
| Feature | @Controller |
@RestController |
|---|---|---|
| Returns View (HTML) | β Yes | β No |
| Returns JSON/XML | β (needs @ResponseBody) |
β By default |
| Use Case | Web UI (Thymeleaf, JSP) | REST APIs (JSON, mobile, frontend) |
Includes @ResponseBody
|
β (optional) | β Implicitly included |
| Response Format | View name (e.g., index.html) |
Raw data (e.g., JSON, XML) |
β Summary
| Annotation | Purpose | Automatically Adds @ResponseBody? |
|---|---|---|
@Controller |
MVC / web page rendering | β No |
@RestController |
REST API (data exchange) | β Yes |