Как в Spring MVC реализуется возврат представления (View)?

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

Ответ

В Spring MVC контроллер возвращает имя представления (View) в виде строки. Механизм ViewResolver затем сопоставляет это имя с конкретным шаблоном (JSP, Thymeleaf, FreeMarker) для рендеринга.

Типичный поток работы:

  1. Запрос поступает в метод контроллера, аннотированный @GetMapping, @PostMapping и т.д.
  2. Контроллер обрабатывает параметры, вызывает сервисный слой (бизнес-логику) и помещает результаты в объект Model.
  3. Контроллер возвращает String с именем представления.
  4. ViewResolver находит физический файл шаблона по этому имени (например, в /WEB-INF/views/).
  5. Движок шаблонов рендерит представление, подставляя данные из Model, и отправляет HTML клиенту.

Пример с Thymeleaf:

@Controller
public class GreetingController {
    @GetMapping("/greet")
    public String showGreeting(Model model) {
        // Добавляем атрибут в модель для передачи в представление
        model.addAttribute("message", "Hello, Spring MVC!");
        // Возвращаем логическое имя представления.
        // ViewResolver преобразует 'greetPage' в '/WEB-INF/views/greetPage.html'
        return "greetPage";
    }
}

Ключевые моменты:

  • Для REST API (возврат JSON) используется @RestController (комбинация @Controller + @ResponseBody).
  • Можно явно возвращать объект ModelAndView.
  • Префикс, суффикс и путь к шаблонам настраиваются в конфигурации ViewResolver.