Будет ли работать аннотация @RequestMapping (или @GetMapping и др.) над приватным методом в Spring MVC контроллере?

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

Ответ

Нет, не будет. В Spring MVC (и Spring WebFlux) аннотации маппинга запросов (@RequestMapping, @GetMapping, @PostMapping и т.д.) обрабатываются только для публичных (public) методов класса, помеченного как @Controller или @RestController.

Причина: Механизм Spring AOP (или внутренняя рефлексия), используемый для создания прокси и обработки запросов, по умолчанию не имеет доступа к приватным методам.

Пример (неправильно):

@RestController
public class ExampleController {
    @GetMapping("/public")
    public String publicEndpoint() {
        return "Этот эндпоинт работает";
    }

    @GetMapping("/private")
    private String privateEndpoint() { // Этот метод НЕ БУДЕТ зарегистрирован как эндпоинт!
        return "Этот ответ никогда не будет возвращен";
    }
}

Запрос GET /private вернет статус 404 (Not Found), так как Spring не обнаружил для него обработчик.

Решение: Все методы-обработчики запросов в контроллере должны быть объявлены как public.