Ответ
Методы контроллера Spring MVC могут возвращать различные типы, которые Spring автоматически преобразует в HTTP-ответ. Основные категории:
1. Простые типы и объекты (для REST API)
- Примитивы и
String: Возвращаемое значение становится телом ответа.@GetMapping("/status") public String status() { return "OK"; } - Произвольные объекты и коллекции: Автоматически сериализуются в JSON/XML (через
HttpMessageConverter).@GetMapping("/users") public List<User> getUsers() { /*...*/ }
2. ResponseEntity<T> (Полный контроль над ответом)
- Позволяет явно задать статус код, заголовки и тело ответа.
@GetMapping("/user/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { User user = service.findById(id); return user != null ? ResponseEntity.ok(user) : ResponseEntity.notFound().build(); }
3. Типы для работы с View (шаблонизаторы)
String: Интерпретируется как имя представления (view name) для Thymeleaf, JSP и др.@GetMapping("/home") public String homePage(Model model) { return "index"; }ModelAndView: Контейнер для передачи и модели данных, и имени представления.
4. Специальные типы
void: Если метод сам записывает ответ вHttpServletResponse.HttpEntity<T>: АналогичноResponseEntity, но без управления статусом.
Ключевой механизм: Преобразование типа возвращаемого значения в HTTP-ответ выполняется с помощью HandlerMethodReturnValueHandler. Для REST API наиболее часто используются @ResponseBody (или @RestController) с объектами и ResponseEntity.