`@RestController` to w praktyce `@Controller` + `@ResponseBody`, więc metody zwracają bezpośrednio body odpowiedzi (często JSON). `@Controller` zwykle służy do widoków/template’ów renderowanych po stronie serwera.
`@Controller` to kontroler MVC. Domyślnie metoda zwracająca `String` jest traktowana jako **nazwa widoku** i renderowana przez view resolver (Thymeleaf, JSP itd.).
`@RestController` dodaje `@ResponseBody` do każdej metody, czyli:
JSON:
@RestController
class UserApi {
@GetMapping("/users/{id}")
UserDto get(@PathVariable long id) { /* ... */ }
}Widok:
@Controller
class PageController {
@GetMapping("/login")
String loginPage() { return "login"; }
}