В предыдущем посте мы увидели, как работать с параметрами запроса в Java EE MVC . Этот пост продолжается с очень похожей темой: параметры пути.
Параметры пути являются динамической частью пути запроса и могут быть указаны с помощью аннотации @Path.
Например:
01
02
03
04
05
06
07
08
09
10
|
@Controller @Path ( "path-params" ) public class PathParamsController { @GET @Path ( "/date/{year}/{month}" ) public String pathParamDate( @PathParam ( "year" ) int year, @PathParam ( "month" ) int month) { ... } } |
Параметр Paths заключен в фигурные скобки внутри аннотации @Path. В этом примере определены два параметра пути: год и месяц.
С помощью @PathParam параметры пути могут быть сопоставлены с параметрами метода.
Мы можем вызвать этот метод, отправив запрос
1
|
/path-params/date/ 2016 / 01 |
В этом случае 2016 и 1 будут передаваться как аргументы года и месяца.
Тип преобразования
Параметры пути используют те же правила преобразования типов, что и параметры запроса ( объяснение в предыдущем сообщении в блоге ).
Например, мы можем преобразовать параметр пути в значение перечисления следующим образом:
1
2
3
|
public enum Role { admin, reporter, accountant } |
01
02
03
04
05
06
07
08
09
10
|
@Controller @Path ( "path-params" ) public class PathParamsController { @GET @Path ( "/roles/{role}" ) public String pathParamUsers( @PathParam ( "role" ) Role role) { ... } } |
Если мы сейчас отправим запрос
1
|
/path-params/roles/admin |
строка admin преобразуется в соответствующую константу перечисления.
Использование @PathParam для полей и методов
Как и @QueryParam, использование @PathParam не ограничивается параметрами метода. Также можно аннотировать поля или сеттеры с помощью @PathParam.
Например:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
@Controller @Path ( "path-params" ) public class PathParamsController { @PathParam ( "category" ) private String category; @GET @Path ( "/categories/{category}" ) public String findByCategory() { // work with category } } |
Использование параметров пути с шаблонами
Можно определить более конкретный шаблон для переменной пути. Следовательно, регулярное выражение может быть добавлено после имени переменной пути.
Например:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
@Controller @Path ( "path-params" ) public class PathParamsController { @GET @Path ( "/users/{id : \\d+}" ) public String findUserById( @PathParam ( "id" ) long id) { ... } @GET @Path ( "/users/{name : [a-zA-Z]+}" ) public String findUserByName( @PathParam ( "name" ) String name) { ... } } |
Здесь мы определяем два метода контроллера, которые прослушивают / users / {variable}:
- findUserById () вызывается, только если числовой идентификатор является частью пути запроса
- findUserByName () используется, если параметр пути соответствует регулярному выражению [a-zA-Z] +.
Так что, если мы отправим запрос
1
|
/path-params/users/ 123 |
Вызов findUserById () и 123 передается как идентификатор.
Отправка запроса на
1
|
/path-params/users/john |
вызывает findUserByName () и передает john как имя.
Краткое резюме
@PathParam может использоваться для извлечения параметров пути, определенных с помощью @Path. Как и @QueryParam, @PathParam можно использовать для аргументов методов, полей экземпляров и методов.
При определении параметров пути с помощью @Path можно использовать регулярное выражение для определения конкретного шаблона пути.
- Вы можете найти исходный код для всех показанных примеров на GitHub .
Ссылка: | Java EE 8 MVC: Работа с параметрами пути от нашего партнера по JCG Майкла Шаргага в блоге mscharhag, Programming and Stuff . |