В предыдущем посте мы увидели, как работать с параметрами запроса в 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 . |