← Назад к вопросам

Что является результатом выполнения методов контроллера в Spring

2.0 Middle🔥 111 комментариев
#Docker, Kubernetes и DevOps#JVM и управление памятью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Результат выполнения методов контроллера в Spring

Результат выполнения метода контроллера в Spring зависит от типа аннотации и конфигурации, но в основном — это один из следующих типов данных, который Spring Framework обрабатывает и преобразует в HTTP-ответ.

Основные типы результатов

1. Model or ModelAndView

Возвращает объект Model или ModelAndView, содержащий данные для передачи в представление (View):

@Controller
public class UserController {
    @GetMapping("/users/{id}")
    public ModelAndView getUser(@PathVariable Long id) {
        User user = userService.findById(id);
        ModelAndView mav = new ModelAndView("user-detail");
        mav.addObject("user", user);
        return mav;
    }
}

Spring найдёт шаблон и отрендерит его с переданными данными.

2. String (имя представления)

Возвращает строку с именем шаблона:

@Controller
public class ProductController {
    @GetMapping("/products")
    public String getProducts(Model model) {
        List<Product> products = productService.getAllProducts();
        model.addAttribute("products", products);
        return "product-list";
    }
}

3. ResponseEntity — полный контроль над ответом

Возвращает ResponseEntity, который содержит статус, заголовки и тело ответа:

@RestController
public class ApiController {
    @GetMapping("/api/data")
    public ResponseEntity<DataResponse> getData() {
        DataResponse data = new DataResponse("success", "data here");
        return ResponseEntity.ok()
            .header("X-Custom-Header", "value")
            .body(data);
    }
}

4. Объект POJO (для @RestController)

Когда контроллер аннотирован с @RestController, объект автоматически сериализуется в JSON:

@RestController
@RequestMapping("/api")
public class JsonController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "John", "john@example.com");
    }
}

5. void

Метод ничего не возвращает. Если это @RestController, возвращает пустое тело с статусом 200:

@PostMapping("/save")
public void save(@RequestBody User user) {
    userService.save(user);
}

Как Spring обрабатывает результат

  • @Controller → View rendering (ищет шаблон и рендерит HTML)
  • @RestController → JSON serialization (преобразует объект в JSON)
  • HttpMessageConverter используется для сериализации на основе Accept и Content-Type

Практический пример

@RestController
@RequestMapping("/api")
public class ExampleController {
    @GetMapping("/user")
    public User getUser() {
        return new User(1L, "John");
    }
    
    @PostMapping("/user")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        return ResponseEntity.status(HttpStatus.CREATED).body(user);
    }
    
    @GetMapping("/users")
    public List<User> getUsers() {
        return Arrays.asList(new User(1L, "John"), new User(2L, "Jane"));
    }
}

Заключение

Результат метода может быть:

  • String — имя шаблона для рендеринга
  • Model/ModelAndView — данные для представления
  • POJO или List — сериализуется в JSON
  • ResponseEntity — полный контроль над HTTP-ответом
  • void — пустой ответ со статусом 200

Выбор зависит от архитектуры (MVC или REST API).