Передача нескольких переменных в @RequestBody Ajax в Spring MVC

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы передать несколько переменных, вам следует создать POJO и применить его как @RequestBody. Таким образом, вы сможете отправить все данные одним объектом, сформированным в Ajax-запросе.

Java
Скопировать код
// POJO содержащий переменные
public class DataBundle {
    private String text;
    private int number;
    // ... геттеры и сеттеры ...
}

// Метод контроллера в Spring
@PostMapping("/processData")
public void handleData(@RequestBody DataBundle data) {
    // Обработка данных через data.getText(), data.getNumber()
}

Теперь создайте JSON, соответствующий вашему POJO, и отправьте его при помощи jQuery Ajax:

JS
Скопировать код
$.ajax({
    url: '/processData',
    method: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ text: 'example', number: 42 }),
    success: function() { /* Обработка успешного завершения */ }
});
Кинга Идем в IT: пошаговый план для смены профессии

Альтернативы для большей гибкости: когда POJO не подходят

Если POJO кажется вам избыточным, рассмотрите варианты для более гибкого решения:

Использование Map вместе с @RequestBody: удивительная простота

Применяйте Map, если вам не нужно POJO:

Java
Скопировать код
@PostMapping("/processDataMap")
public void handleDataMap(@RequestBody Map<String, Object> dataMap) {
    // Ваши данные под рукой, используйте ключи 'text' и 'number'
}

ObjectNode из Jackson для сложных структур

Если при работе со сложными или динамическими JSON-структурами ObjectNode обычно становится решением:

Java
Скопировать код
@PostMapping("/processDataDynamic")
public void handleDataObjectNode(@RequestBody ObjectNode objectNode) {
    // Тут лучше использовать objectNode.get("text")
}

Индивидуальное решение с HandlerMethodArgumentResolver

Для полной кастомизации можно определить собственный HandlerMethodArgumentResolver:

Java
Скопировать код
public class CustomDataBundleResolver implements HandlerMethodArgumentResolver {
    // Опишите здесь логику извлечения данных из запроса.
}

Затем добавьте его в конфигурацию Spring MVC.

Визуализация

Αjax-запрос к контроллеру Spring MVC с @RequestBody можно представить как "доставку" товаров, вот так:

{ "sugar": 2, "spice": 3, "berries": 5 } :🚚 ➡️ 🍮
# Передаем несколько параметров одним пакетом для их последующей обработки.

Ajax-запрос это ваш "доставщик":

🚚: $.ajax({
  type: "POST",
  contentType: "application/json",
  url: "/bakery",
  data: JSON.stringify(basket),
  ...
});

Качественная упаковка гарантирует успешную доставку.

Приоритет безопасности: надёжное управление параметрами запроса

Безопасность превыше всего при работе с @RequestBody

Наличие надежного фильтра и обработка входящих данных обеспечивает безопасность:

Java
Скопировать код
public class SafeDataBundle {
    @NotNull
    private String safeText;
    @Min(0)
    private int safeNumber;
    // методы получения и изменения данных с добавленными проверками
}

Сочетание: комбинирование разных параметров запроса

Используйте @RequestBody в сочетании с @RequestParam или @PathVariable при работе со встроенными типами:

Java
Скопировать код
@PostMapping("/processDataMix/{pathId}")
public void handleDataMix(@PathVariable int pathId, 
                          @RequestParam String query, 
                          @RequestBody DataBundle data) {
    // Теперь у нас есть и путь, и параметры запроса, и тело запроса
}

Мастер-класс: сложные сценарии обработки данных

Для сложных структур JSON или выборочной сериализации используйте Jackson Mix-in аннотации или JSON Views.

Полезные материалы

  1. Spring MVC – создание REST-контроллеров: официальная документация Spring — Дельные советы по созданию REST-контроллеров.
  2. Подробное руководство по использованию аннотации @RequestBody в Spring — Глубокое погружение в работу с @RequestBody.
  3. Spring MVC Test Framework: тестирование контроллеров с помощью MockMvc — Руководство по использованию MockMvc для проверки навыков работы со Spring MVC.
  4. Обработка нескольких Ajax-запросов на сохранение — Разбираем на практике реализацию множественного сохранения данных через Ajax.