В последних статьях мы увидели, как получить доступ к параметрам запроса , пути и формы в контроллерах 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" ) @Controller public 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 . |