Какая аннотация объединяет @Controller и @ResponseBody, чтобы методы возвращали данные прямо в тело ответа?
- Чем @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?
Разбор темы
- Spring MVC: DispatcherServlet и обработка запроса
Конвейер обработки запроса, @Controller против @RestController, маппинги, извлечение данных и контроль ответа.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.