Вопрос по java, rest – REST, как передать пустой параметр пути?

13

Я строю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 вызывал этот сервлет.

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

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

Разве нельзя вызвать второй URL и вызвать сервлет выше?

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

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

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

Ваш Ответ

2   ответа
-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??? 
  }
совпадать с именем или без, Chen Keinan
28

2.1.1. @Пут).

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

@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???
}

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

@ willy_z Это то, что ожидается. Статическая часть или соответствующий путьgetall/ содержит косую черту. Если вы хотите также соответствоватьhost/getall вам нужно изменить регулярное выражение, чтобы соответствовать обоим, например@Path("{\\/getall|\\/getall\\/name: .*}") (не проверено) см. JAX-RS Spec для получения подробной информации о поддерживаемых регулярных выражениях. andih
Он работает только с host / getall / и host / getall / name, но не с host / getall. Мой Джерси 2.23. Willie Z
Спасибо, я попробовал выше и работал отлично! masato-san
@ Андрей, пожалуйста, создай новый вопрос. Без контекста невозможно ответить на вопрос. andih
Здравствуй! Что делать, если ситуация следующая: " MYPAGE / ресурс / GETALL / имя? Тип = @ JS "" MYPAGE / ресурс / GETALL? Тип = @ JS "Решение выше не работает. Andrew

Похожие вопросы