Рубрики
Без рубрики

Путеводитель по весенним WebUtils и ServletRequestUtils

В этой статье мы исследуем сборку веб-запросов utils in Spring MVC – WebUtils, ServletRequestUtils.

Автор оригинала: baeldung.

1. Обзор

В этой быстрой статье мы изумим сборку веб-запросов utils весной MVC – ВебУтилс , СервлетРеквестУтилс .

2. WebUtils и ServletRequestUtils

Почти во всех приложениях мы сталкиваемся с ситуациями, когда нам необходимо получить некоторые параметры из входящего запроса HTTP .

Для этого нам пришлось создать несколько действительно беспокойных сегментов кода, таких как:

HttpSession session = request.getSession(false);
if (session != null) {
    String foo = session.getAttribute("parameter");
}

String name = request.getParameter("parameter");
if (name == null) {
    name = "DEFAULT";
}

Использование ВебУтилс и СервлетРеквестУтилс , мы можем сделать это только с одной строкой кода.

Чтобы увидеть, как работают эти утилиты, давайте создадим простое веб-приложение.

3. Примеры страниц

Нам нужно создать образцы страниц, чтобы иметь возможность связать URL-адреса. Мы хотели бы использовать Весенняя загрузка и Тимьян как наш шаблон двигателя. Мы должны добавить необходимые зависимости для них.

Давайте создадим страницу с простой формой:

Set Parameter:


Another Page

Как видим, мы создаем форму для инициирования POST просьба.

Существует также одна ссылка, которая будет переамедать пользователей на следующую страницу, где мы покажем представленный параметр из атрибута сеанса.

И давайте создадим вторую страницу:

Parameter set by you: 

4. Использование

Теперь, когда мы закончили строить представления, давайте создадим наш контроллер и будем использовать СервлетРеквестУтилс и получить параметр запроса:

@PostMapping("/setParam")
public String post(HttpServletRequest request, Model model) {
    String param 
      = ServletRequestUtils.getStringParameter(
        request, "param", "DEFAULT");

    WebUtils.setSessionAttribute(request, "parameter", param);

    model.addAttribute("parameter", "You set: " + (String) WebUtils
      .getSessionAttribute(request, "parameter"));

    return "utils";
}

Обратите внимание, как мы используем getStringParameter API в СервлетРеквестУтилс чтобы получить имя параметра запроса парам ; значение по умолчанию будет присвоено параметру запроса, если в контроллер не попадает значение.

И, конечно же, обратите внимание на наборSessionAttribute API из ВебУтилс используется для настройки значения атрибута сеанса. Нам не нужно явно проверять, существует ли сеанс или ссылка в ванильном сервлете. Весна настроила его на лету.

Таким же образом давайте создадим другого обработчика, который покажет следующий атрибут сеанса:

@GetMapping("/other")
public String other(HttpServletRequest request, Model model) {
    
    String param = (String) WebUtils.getSessionAttribute(
      request, "parameter");
    
    model.addAttribute("parameter", param);
    
    return "other";
}

Это все, что нам нужно для создания нашего приложения.

Один быстрый момент, чтобы отметить здесь, что СервлетРеквестУтилс имеет некоторые замечательные встроенные функции, которые будут автоматически typecast параметр запроса на основе нашей необходимости.

Вот как мы можем преобразовать параметр запроса в Длинные :

Long param = ServletRequestUtils.getLongParameter(request, "param", 1L);

Аналогичным образом, мы можем преобразовать параметр запроса в другие типы:

boolean param = ServletRequestUtils.getBooleanParameter(
  request, "param", true);

double param = ServletRequestUtils.getDoubleParameter(
  request, "param", 1000);

float param = ServletRequestUtils.getFloatParameter(
  request, "param", (float) 1.00);

int param = ServletRequestUtils.getIntParameter(
  request, "param", 100);

Еще один момент, чтобы отметить, что СервлетРеквестУтилс имеет другой метод getRequiredStringParameter (запрос ServletRequest, название строки) для извлечения параметра запроса. Разница в том, что если параметр не найден в входящего запроса, он будет бросать ServletRequestBindingException . Это может быть полезно, когда нам нужно играть с критическими данными.

Ниже приведен пример фрагмента кода:

try {
    ServletRequestUtils.getRequiredStringParameter(request, "param");
} catch (ServletRequestBindingException e) {
    e.printStackTrace();
}

Мы также можем создать один простой тестовый случай JUnit для тестирования приложения:

@Test
public void givenParameter_setRequestParam_andSetSessionAttribute() 
  throws Exception {
      String param = "testparam";
 
      this.mockMvc.perform(
        post("/setParam")
          .param("param", param)
          .sessionAttr("parameter", param))
          .andExpect(status().isOk());
  }

5. Заключение

В этой статье мы видим, что с помощью ВебУтилс и СервлетРеквестУтилс может значительно уменьшить количество шаблонного кодирования накладных расходов. Однако, с другой стороны, это, безусловно, увеличивает зависимость от весенней структуры – что-то иметь в виду, если это беспокойство.

Как всегда, исходный код доступен более на GitHub .