В последних статьях мы увидели, как получить доступ к параметрам запроса , пути и формы в контроллерах MVC. Этот пост показывает, как несколько параметров могут быть сопоставлены с объектом с помощью аннотации @BeanParam.
Давайте снова используем простую 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> |
Это определяет простую форму, содержащую два поля ввода текста и меню выбора с тремя опциями.
В предыдущем посте о параметрах формы мы узнали, что мы можем получить доступ к этим параметрам, пометив параметры контроллера с помощью @FormParam.
Однако такой подход обременителен, если форма имеет несколько параметров. В этих ситуациях мы обычно хотим отобразить параметры формы на отдельный объект. @BeanParams помогает нам в этом.
С @BeanParam мы можем написать:
|
1
2
3
4
5
6
|
@POST@Path("submit")@Controllerpublic String submit(@BeanParam User user) { // use user ..} |
Класс User выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public class User { @FormParam("id") private long id; @FormParam("name") private String name; @FormParam("role") private Role role; // getters and setters} |
Когда вызывается метод контроллера, автоматически создается новый экземпляр User. Поля созданного объекта будут заполнены переданными параметрами формы.
@BeanParam и другие аннотации параметров
Классы, используемые с @BeanParam, не ограничиваются параметрами формы. Все аннотации параметров, показанные в предыдущих сообщениях в блоге ( @QueryParam , @PathParam и т. Д.), Могут использоваться внутри параметров компонента.
Например:
|
1
2
3
4
5
|
@GET@Path("/date/{year}/{month}")public String get(@BeanParam RequestData data) { ...} |
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public class RequestData { @PathParam("year") private int year; @PathParam("month") private int month; @QueryParam("name") private String name; // getters and setters} |
Если мы сейчас отправим HTTP GET запрос
|
1
|
/date/2016/02?name=john |
значения 2016, 2 и john будут введены в поля year, month и name RequestData.
Краткое резюме
С @BeanParam вы можете вводить параметры запроса в бины. Это особенно полезно, если у вас есть несколько параметров. Внутри параметров бина могут использоваться все остальные аннотации параметров.
- Вы можете найти пример исходного кода на GitHub .
| Ссылка: | Java EE 8 MVC: Работа с параметрами бина от нашего партнера JCG Майкла Шаргага в блоге mscharhag, Programming and Stuff . |