Resteasy @path с нулевым или большим количеством параметров пути - PullRequest
3 голосов
/ 23 января 2012

Я использую RESTEasy в моей разработке API. Мой URL-адрес http://localhost:8080/project/player/M или http://localhost:8080/project/player

это означает, что я обозначаю {пол} как параметр пути.

Моя проблема в том, как сопоставить этот URL-адрес с методом REST, я использую ниже сопоставление

@GET
@Path("player/{gender}")
@Produces("application/json")

но если его использовать, он сопоставляется для http://localhost:8080/project/player/M, но не для http://localhost:8080/project/player. мне нужно регулярное выражение, чтобы отобразить ноль или более параметров пути

Спасибо.

Ответы [ 4 ]

8 голосов
/ 08 марта 2012

Есть ли причина, по которой это должен быть параметр пути, а не строка запроса? Если вы измените его на последний, вы можете использовать аннотацию @DefaultValue.

Таким образом, ваш код будет выглядеть следующим образом:

@GET
@Path("player") //example: "/player?gender=F"
@Produces("application/json")
public Whatever myMethod(@QueryParam("gender") @DefaultValue("M") final String gender) {
  // your implementation here
}
4 голосов
/ 23 января 2012

Параметры пути (@PathParam) не являются обязательными. Если вы хотите на карту;

Вам понадобятся два метода. Вы можете использовать метод перегрузки;

@GET
@Path("player/{gender}")
@Produces("application/json")
public Whatever myMethod(@PathParam("gender") final String gender) {
  // your implementation here
}

@GET
@Path("player")
@Produces("application/json")
public Whatever myMethod() {
  return myMethod(null);
}
1 голос
/ 23 января 2012

См. Ссылку ниже, которая содержит образец необязательных параметров пути с помощью регулярных выражений

RestEasy @Path Вопрос с регулярным выражением

0 голосов
/ 07 мая 2017

Вы должны использовать регулярное выражение, если вы хотите иметь необязательный параметр в пути.

Таким образом, ваш код будет выглядеть следующим образом:

@GET
@Path("/player{gender : (/\\w+)?}")
@Produces("application/json;charset=UTF-8")
public Whatever myMethod(@QueryParam("gender") @DefaultValue("M") final String gender) {
  // your implementation here
}

Для получения дополнительной информации см. https://docs.jboss.org/resteasy/docs/1.1.GA/userguide/html/Using__Path_and__GET___POST__etc..html

...