Статьи

Java EE 8 MVC: работа с параметрами формы

В предыдущих двух статьях мы увидели, как работать с параметрами запроса и пути в будущей инфраструктуре Java EE MVC. Этот пост посвящен параметрам формы.

Когда вы отправляете веб-форму с помощью почтового запроса, значения формы отправляются как часть тела запроса. Тип медиа (или тип контента) определяет формат, который используется для хранения значений внутри тела запроса. Веб-формы обычно используют медиа-тип application / x-www-form-urlencoded. Параметры, отправляемые с использованием этого типа мультимедиа, доступны с помощью аннотации @FormParam.

Использование параметров формы

Предположим, у нас есть следующая простая HTML-форма, содержащая два поля ввода текста и меню выбора:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<form action="submit" method="post">
  <label>ID:</label>
  <input type="text" name="id" />
   
  <label>Name:</label>
  <input type="text" name="name" />
   
  <label>Role:</label>
  <select name="role">
    <option value="admin">Admin</option>
    <option value="reporter">Reporter</option>
    <option value="accountant">Accountant</option>
  </select>
   
  <input type="submit" />
</form>

Для обработки значений формы мы можем использовать следующий метод контроллера:

1
2
3
public enum Role {
  admin, reporter, accountant
}
01
02
03
04
05
06
07
08
09
10
11
12
13
14
@Controller
@Path("form-params")
public class FormParamsController {
 
  @POST
  @Path("submit")
  public String submitParams(
      @FormParam("id") long id,
      @FormParam("name") String name,
      @FormParam("role") Role role) {
 
    ...
  }
}

С помощью @FormParam параметры формы могут автоматически сопоставляться с аргументами метода. Параметры формы используют те же правила преобразования типов, что и параметры запроса или пути (описано здесь ). Это облегчает преобразование параметров формы в примитивы, перечисления или объекты.

Использование @FormParam для полей и методов

Как и другие аннотации параметров, @FormParam можно использовать для аннотирования полей и методов.

Например:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
@Controller
@Path("form-params-fields")
public class FormParamsFieldController {
 
  @FormParam("id")
  private long id;
 
  @FormParam("role")
  private Role role;
 
  private String name;
 
  @FormParam("name")
  public void setNameField(String name) {
    this.name = name;
  }
 
  @POST
  public String submitParams() {
     // use id, role, name
  }
}

В этом примере представленные параметры формы отображаются на поля (id, role) и setter (setNameField ()). Внутри submitParams () мы можем просто получить доступ к полям для получения параметров формы.

Краткое резюме

Параметры, отправленные через формы HTML, можно получить с помощью @FormParam. Как и @QueryParam и @PathParam, можно аннотировать поля, методы и параметры методов с помощью @FormParam.

  • Вы можете найти исходный код для всех примеров на GitHub .