Вопрос по java, rest – 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 вызывал этот сервлет.
Я думал, что сервлет будет вызван, и я могу просто проверить customerName == null, а затем вызвать другой SQL и так далее.
Но когда клиент отправляет запрос, используя второй URL-адрес (то есть без параметра пути), сервлет не вызывается, поскольку у URL-адреса нет параметра пути {имя}.
Разве нельзя вызвать второй URL и вызвать сервлет выше?
Одна из альтернатив, которую я могу придумать, это использоватьquery parameter
:
http://myPage/resource/getall?name=value
Может, я смогу разобрать и посмотреть, если"value"
равно нулю, тогда примите соответствующие меры ..
Если ты используешь.*
соответствует как пустым, так и непустым именам. Итак, если вы напишите:
@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».
getall/
содержит косую черту. Если вы хотите также соответствоватьhost/getall
вам нужно изменить регулярное выражение, чтобы соответствовать обоим, например@Path("{\\/getall|\\/getall\\/name: .*}")
(не проверено) см. JAX-RS Spec для получения подробной информации о поддерживаемых регулярных выражениях.