Подтвердить что ты не робот

REST, как пройти пустые параметры пути?

Я создаю веб-приложение REST, используя Netbean 7.1.1 Glassfish 3.1.2

У меня есть 2 URL:

"http://myPage/resource/getall/name"  (get some data by name)

"http://myPage/resource/getall" (get all data)

Когда клиент отправляет запрос с использованием первого URL-адреса, вызывается сервлет ниже и выполняет некоторый процесс.

@Path("getall/{name}")
@GET
@Produces("application/json")
public Object Getall(@PathParam("name") String customerName) {
      //here I want to call SQL if customerName is not null. is it possible???
}

Но я также хочу, чтобы второй URL-адрес вызывал этот сервлет.

Я думал, что сервлет будет вызван, и я могу просто проверить имя_пользователяNNO, а затем вызвать другой SQL и так далее.

Но когда клиент отправляет запрос с использованием второго URL (т.е. без параметра пути), сервлет не вызывается, потому что URL-адрес не имеет параметра пути {name}.

Невозможно ли вызвать второй URL-адрес и вызвать сервлет выше?

Один из вариантов, о котором я могу думать, - использовать query parameter:

http://myPage/resource/getall?name=value

Может быть, я могу разобрать его и посмотреть, есть ли "value" null, а затем предпринять соответствующие действия.

4b9b3361

Ответ 1

Вы можете указать регулярное выражение для параметра Path (см. 2.1.1. @Path).

Если вы используете .*, то указываете как пустые, так и непустые имена Поэтому, если вы пишете:

@GET
@Path("getall/{name: .*}")
@Produces("application/json")
public Object Getall(@PathParam("name") String customerName) {
      //here I want to call SQL if customerName is not null. is it possible???
}

он будет соответствовать как "http://myPage/resource/getall", так и "http://myPage/resource/getall/name".

Ответ 2

@GET
@Path("getall{name:(/[^/]+?)?}")
@Produces("application/json")
public Object Getall(@PathParam("name") String customerName) {
  //here I want to call SQL if customerName is not null. is it      

 possible??? 
  }