Для чего используется аннотация @RestController в Spring?

«Для чего используется аннотация @RestController в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@RestController — это удобная стереотипная аннотация Spring MVC, которая объединяет @Controller и @ResponseBody.

Назначение: Создание RESTful веб-сервисов, где каждый метод обработчика по умолчанию возвращает данные (например, JSON/XML), а не имя представления для рендеринга HTML.

Преимущества и особенности:

  • Сокращение кода: Не нужно аннотировать каждый метод @ResponseBody.
  • Четкое разделение: Контроллеры для REST API (@RestController) vs. контроллеры для веб-интерфейсов с HTML (@Controller).
  • Под капотом @RestController — это @Controller + @ResponseBody.

Пример:

@RestController
@RequestMapping("/api/users")
public class UserRestController {
    @GetMapping
    public List<User> getAllUsers() { // Возвращает JSON-список
        return userService.findAll();
    }
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) { // Принимает и возвращает JSON
        User saved = userService.save(user);
        return ResponseEntity.created(URI.create("/api/users/" + saved.getId())).body(saved);
    }
}