@Controller | @RestController | |
|---|---|---|
| Trả về | View name (template) | Data trực tiếp (JSON/XML) |
| Dùng cho | Web MVC (Thymeleaf, JSP) | REST API |
java
// @Controller — trả về view
@Controller
class PageController {
@GetMapping("/home")
String home(Model model) {
model.addAttribute("user", "Alice");
return "home"; // resolve → templates/home.html
}
}
// @RestController — trả về data
@RestController
@RequestMapping("/api/users")
class UserController {
@GetMapping("/{id}")
User get(@PathVariable Long id) {
return userService.find(id); // serialize → JSON
}
}@RestController = @Controller + @ResponseBody.
@ResponseBody nói với Spring: không resolve view, dùng Jackson serialize object → JSON vào response body.
@Controller | @RestController | |
|---|---|---|
| Returns | View name (template) | Data directly (JSON/XML) |
| Use case | Web MVC (Thymeleaf, JSP) | REST API |
java
// @Controller — returns a view
@Controller
class PageController {
@GetMapping("/home")
String home(Model model) {
model.addAttribute("user", "Alice");
return "home"; // resolves to templates/home.html
}
}
// @RestController — returns data
@RestController
@RequestMapping("/api/users")
class UserController {
@GetMapping("/{id}")
User get(@PathVariable Long id) {
return userService.find(id); // serialised → JSON
}
}@RestController = @Controller + @ResponseBody.
@ResponseBody tells Spring: do not resolve a view, use Jackson to serialise the object directly into the response body.