Какой фреймворк используется для разработки контроллеров в Java
Что проверяют
Знаете ли вы Spring MVC глубже аннотации @RestController: как запрос доходит до метода, как тело превращается в объект и обратно, где обрабатываются ошибки. Следом часто спрашивают про альтернативы: WebFlux и JAX-RS.
Как отвечать
Основной ответ это Spring MVC, в проектах почти всегда поверх Spring Boot. Опишите путь запроса:
DispatcherServlet: единая точка входа по паттерну Front Controller, принимает все запросы;HandlerMapping: находит метод по URL и HTTP-методу из@GetMapping,@PostMappingи соседних аннотаций;- аргументы:
@PathVariable,@RequestParam,@RequestBodyвместе с@Validдля Bean Validation; HttpMessageConverter: сериализует ответ, для JSON по умолчанию через Jackson;- ошибки:
@RestControllerAdviceс@ExceptionHandler, ответ в форматеProblemDetail(RFC 9457) поддерживается начиная с Spring 6.
Разница аннотаций: @RestController это @Controller плюс @ResponseBody, то есть возвращаемое значение уходит в тело ответа, а не трактуется как имя шаблона. ResponseEntity нужен, когда надо управлять статусом и заголовками.
Контроллер по умолчанию синглтон, поэтому состояния запроса в его полях быть не должно. Бизнес-логика живёт в сервисах, контроллер принимает запрос, валидирует его и отдаёт DTO.
Альтернативы: Spring WebFlux на Netty с Mono и Flux для реактивного неблокирующего стека, JAX-RS (Jakarta REST) с @Path и @GET в Jakarta EE и Quarkus. Стоит упомянуть, что в Spring Boot 3.2+ на Java 21 виртуальные потоки включаются свойством spring.threads.virtual.enabled=true, и для многих сервисов это снимает мотивацию переходить на WebFlux.
Где спотыкаются
Путают @Controller и @RestController, а потом не понимают, почему вместо JSON приходит ошибка поиска шаблона.
Хранят данные запроса в полях контроллера. Под нагрузкой они перемешиваются между потоками, и один пользователь видит чужие данные.
Называют WebFlux «быстрее по умолчанию». Он выигрывает при большом числе ожидающих соединений и полностью неблокирующем стеке, а блокирующий JDBC внутри реактивного кода только ухудшает ситуацию.