Gymterview
junior

В чём разница между @Controller и @RestController?

@Controller – аннотация для контроллеров, возвращающих представления (HTML через шаблонизаторы). @RestController – комбинация @Controller + @ResponseBody, где каждый метод автоматически сериализует объект в тело HTTP-ответа (JSON по умолчанию).

Аспект @Controller @RestController
Возвращает Имя view (String) Объект (-> JSON)
@ResponseBody Нужно добавить явно Включено по умолчанию
Применение SSR (Thymeleaf, JSP) REST API
Content-Type text/html application/json
Пример
@Controller
public class PageController {
    @GetMapping("/users")
    public String usersPage(Model model) {
        model.addAttribute("users", userService.findAll());
        return "users"; // имя шаблона templates/users.html
    }
}

@RestController
@RequestMapping("/api/users")
public class UserRestController {
    @GetMapping
    public List<UserDto> getAllUsers() {
        return userService.findAll(); // автоматически в JSON
    }
}

На собеседовании: @RestController = @Controller + @ResponseBody на каждом методе. Частая ошибка – использовать @RestController и пытаться вернуть имя view (Spring вернёт строку как JSON, а не отрендерит шаблон).