@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 |