Вопрос с собеседования · Spring

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

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

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

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

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

Подробно

@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
  • ✗@RestControllerAdvice
  • ✓@RestController
  • ✗@RequestMapping

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования