Ответ
Spring MVC предоставляет несколько аннотаций для работы с параметрами HTTP-запросов, выбор зависит от типа запроса (GET/POST) и структуры данных.
Основные способы:
-
@RequestParamдля отдельных параметров: Идеально для простых GET-запросов с небольшим количеством параметров.@GetMapping("/search") public String search(@RequestParam("q") String query, @RequestParam(defaultValue = "1") int page, @RequestParam(required = false) String sort) { // Обработка параметров query, page, sort } // URL: /search?q=java&page=2&sort=name -
@RequestParam Mapдля динамических параметров: Если имена или количество параметров неизвестны на этапе компиляции.@GetMapping("/filter") public String filter(@RequestParam Map<String, String> allParams) { // allParams содержит все переданные параметры } -
@ModelAttributeдля привязки к объекту: Стандартный способ для HTML-форм (POST). Параметры запроса автоматически связываются с полями объекта.@PostMapping("/register") public String submitForm(@ModelAttribute("user") UserDto userDto) { // Поля userDto заполнены значениями из формы } // Класс UserDto должен иметь сеттеры для полей, совпадающих с именами параметров. -
@RequestBodyдля сложных структур (JSON/XML): Основной способ для REST API. Тело запроса десериализуется в объект.@PostMapping("/api/search") public ResponseEntity<SearchResult> search(@RequestBody SearchRequest request) { // request — сложный объект с вложенными полями } // Тело запроса (JSON): {"query": "java", "filters": {"type": "book"}, "page": 1}
Краткое руководство по выбору:
- REST API (JSON): Используйте
@RequestBodyс DTO-объектами. - Веб-формы (HTML): Используйте
@ModelAttribute. - Простые GET-запросы (ссылки, фильтры): Используйте
@RequestParam. - Динамические фильтры: Используйте
@RequestParam Map.