Получить доступ

Какая аннотация объединяет @Controller и @ResponseBody, чтобы методы возвращали данные прямо в тело ответа?

JuniorSpring MVC и RESTSpring
Ещё спрашивают так:
  • Чем @Controller отличается от @RestController?
Коротко

@RestController = @Controller + @ResponseBody: возвращаемое значение каждого метода сериализуется в тело ответа (обычно JSON через Jackson), а не трактуется как имя представления.

  • @Controller без @ResponseBody — для серверного рендеринга (Thymeleaf): метод возвращает имя шаблона
  • Формат выбирают HttpMessageConverter по заголовку Accept
  • ResponseEntity — когда нужно задать статус и заголовки

А ещё В одном @Controller можно пометить @ResponseBody отдельные методы

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

@Controller — компонент Spring MVC, методы которого обрабатывают запросы. По умолчанию возвращаемая строка — имя представления: return "orders" → шаблон orders.html, модель передаётся через Model.

@ResponseBody говорит: результат метода — тело ответа. Spring выбирает HttpMessageConverter (Jackson для JSON, JAXB для XML, строки, байты) по типу результата и заголовку Accept.

@RestController — составная аннотация: @Controller + @ResponseBody на все методы. Для REST API — стандартный выбор.

Управление ответом:

  • ResponseEntity<T> — статус, заголовки и тело: ResponseEntity.created(uri).body(dto);
  • @ResponseStatus(HttpStatus.CREATED) — статус по умолчанию для метода;
  • исключения → @RestControllerAdvice и ProblemDetail.

Пример

@RestController
@RequestMapping("/api/orders")
class OrderController {
    @GetMapping("/{id}")
    OrderDto get(@PathVariable long id) { return service.find(id); }   // JSON в теле
}

Что хотят услышать

  • Состав @RestController.
  • Разница с @Controller и представлениями.
  • HttpMessageConverter и ResponseEntity — плюс.

Частые ошибки

  • Вернуть объект из @Controller без @ResponseBody и получить ошибку поиска шаблона.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗@Controller
  • ✓@RestController
  • ✗@RequestMapping
  • ✗@Service

Что спросят дальше

  • Чем @RestController отличается от @Controller?
  • Как настроить сериализацию в JSON?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем