Что возвращают методы контроллера в Spring MVC?

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

Ответ

Методы контроллера в Spring MVC могут возвращать различные типы объектов, которые фреймворк преобразует в HTTP-ответ. Основные варианты:

  1. String — имя логического представления (view name) для разрешения через ViewResolver.
  2. ModelAndView — объект, содержащий и модель данных, и имя представления.
  3. ResponseEntity<T> — полный HTTP-ответ, включая статус, заголовки и тело. Используется для REST API.
  4. @ResponseBody + тип объекта — объект будет сериализован (например, в JSON/XML) и записан в тело ответа. Часто используется с аннотацией @RestController.
  5. void — если метод обрабатывает ответ напрямую через HttpServletResponse.

Примеры:

// Возврат имени представления
@GetMapping("/home")
public String home(Model model) {
    model.addAttribute("message", "Hello");
    return "homePage"; // Resolves to /WEB-INF/views/homePage.jsp
}

// Возврат данных для REST API (JSON)
@RestController
public class ApiController {
    @GetMapping("/user/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.findById(id);
        return user != null 
            ? ResponseEntity.ok(user) 
            : ResponseEntity.notFound().build();
    }
}