2012-04-14 3 views
12

Я строю REST веб-приложение с использованием Netbean 7.1.1 Glassfish 3.1.2REST, как пройти пустые параметры пути?

У меня есть 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-адрес вызывал этот сервлет.

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

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

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

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

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

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

ответ

26

Вы можете задать регулярное выражение для ваш параметр пути (см. 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/ресурс/GETALL" и «HTTP: // MYPAGE/ресурс/GETALL/имя».

+0

Спасибо, я пробовал и работал отлично! –

+0

Привет! Что делать, если ситуация следующая: «http: // myPage/resource/getall/name? Type = json» «http: // myPage/resource/getall? Type = json» Решение выше не работает. – Andrew

+0

@ Andrew пожалуйста, создайте новый вопрос. Без какого-либо контекста ответить на вопрос невозможно. – andih

-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??? 
    } 
+0

соответствуют как с именем, так и без него, –

Смежные вопросы