In Spring Framework (especially Spring MVC and Spring Boot), both @Controller and @RestController are used to define web controllers, but they behave differently in how they handle responses.
✅ 1. @Controller (Classic MVC Controller)
-
Returns views (like JSP, Thymeleaf).
-
Used in traditional web applications.
-
You typically return a view name, not the response body.
-
To return data (like JSON), you need to use
@ResponseBody.
E.g.,
@Controller
public class MyController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello from Controller");
return "hello"; // returns view "hello.html" or hello.jsp
}
@GetMapping("/api/data")
@ResponseBody
public String getData() {
return "This is raw data"; // returns raw response
}
}
✅ 2. @RestController (Spring 4+ Shortcut for REST APIs)
-
A convenient annotation for RESTful services.
-
Equivalent to
@Controller + @ResponseBodyon every method. -
Returns JSON or XML directly (default: JSON).
-
No view resolution.
E.g.,
@RestController
public class MyRestController {
@GetMapping("/hello")
public String hello() {
return "Hello from RestController"; // returned directly as response body
}
@GetMapping("/json")
public Map<String, Object> json() {
return Map.of("status", "success", "code", 200); // returns as JSON
}
}
🔍 Comparison Table:
| Feature | @Controller | @RestController |
|---|---|---|
| Purpose | Traditional MVC (Web UI) | REST APIs (returning data) |
| View Resolver Used? | Yes | No |
| JSON Response Default? | No (need @ResponseBody) | Yes |
| Introduced In | Spring 2.5 | Spring 4.0 |
| Best Use Case | Web apps with HTML/JSP/Thymeleaf | RESTful web services |
✅ When to Use What?
| If you're building... | Use |
|---|---|
| A full web UI (JSP, Thymeleaf) | @Controller |
| A JSON/REST API backend | @RestController |
No comments:
Post a Comment